google-bigquery - Bigquery 表嵌套多值列在查询时出错
问题描述
我正在尝试将具有嵌套多值列的表中的数据加载到具有相同架构但少一个或多个字段的另一个表中。
表 1 架构:
Person RECORD REPEATED ;
Person.Address RECORD REPEATED ;
Person.Address.phone INTEGER NULLABLE ;
Person.Address.zip INTEGER NULLABLE ;
Person.flag INTEGER ;
Wt INTEGER ;
表 2 架构:
Person RECORD REPEATED ;
Person.Address RECORD REPEATED ;
Person.Address.phone INTEGER NULLABLE ;
Person.flag INTEGER ;
Wt INTEGER ;
请注意,这两个表之间的唯一区别是表 2 没有“zip”字段。
我正在尝试使用以下查询从 Table-1 加载 Table-2:
INSERT INTO TABLE-2
SELECT
ARRAY (SELECT AS STRUCT (ARRAY (SELECT AS STRUCT (SELECT PA.phone from unnest (P.Address) as
PA)), P.flag) from unnest(Table-1.Person) as P), s.Wt
from Table-1
这总是会引发以下错误:“查询列 1 的类型为 ARRAY>,INT64>>>,无法插入到类型为 ARRAY> 的 Person 列中,在 [2:1] 处标记为 INT64>>”
如果您查看查询,它与目标列的查询完全匹配。关于出了什么问题的任何想法?
解决方案
以下是 BigQuery 标准 SQL
INSERT INTO `project.dataset.table2`
SELECT * REPLACE(
ARRAY(
SELECT AS STRUCT * REPLACE(
ARRAY(SELECT AS STRUCT * EXCEPT(zip) FROM p.Address)
AS Address)
FROM t.Person p
) AS Person
)
FROM `project.dataset.table1` t
zip
上面通过仅从地址记录中“提取”该字段来生成与 table1 中完全相同的架构,但字段除外。无论您有多少其他字段,其他所有内容都保持不变
推荐阅读
- excel - 日期差异
- python-3.x - 每次运行 Python / Selenium 脚本时,它的行为都会有所不同
- r - R:如何在某个关键短语之前和之后提取子字符串?
- sql - SQL中的后/前填充值
- reactjs - React 使用 Hooks 处理链接的条件渲染
- python - python - 如何使用 glob.glob 创建包含大量数据帧的字典
- docker - 在 docker exec -it 之后持久化 gradle 守护进程
梯度构建 - unity3d - Unity Rigidbody2d.addforce 在施加力后不会改变方向
- google-cloud-platform - 如何在合作防火墙后面的谷歌云平台上进行 git clone?
- javascript - 如何读取具有不同名称的所有 json 数据