我有一个架构,其中包含多个未嵌套的重复字段。
我正在尝试查询叉积,但出现错误:“无法查询重复字段的叉积...”
如果我只查询 2 个重复字段,我可以展平其中一个。然而,我有兴趣查询超过 2 个重复字段,但我不明白 FLATTEN 语法如何支持这一点。
例如,假设表结构为:a1,记录(重复):a1.b1,整数a2,记录(重复):a2.b1,整数a3,记录(重复):a3.b1,整数
我要查询:select (*) from tab
我有一个架构,其中包含多个未嵌套的重复字段。
我正在尝试查询叉积,但出现错误:“无法查询重复字段的叉积...”
如果我只查询 2 个重复字段,我可以展平其中一个。然而,我有兴趣查询超过 2 个重复字段,但我不明白 FLATTEN 语法如何支持这一点。
例如,假设表结构为:a1,记录(重复):a1.b1,整数a2,记录(重复):a2.b1,整数a3,记录(重复):a3.b1,整数
我要查询:select (*) from tab
您可以在FLATTEN
. 它需要在 select 语句周围加上一个额外的括号。(不幸的是,语法有点难看)。例如
SELECT
...
FROM (
FLATTEN((
SELECT
...
FROM (
FLATTEN((
SELECT
...
FROM
table),
f1)
)
),
f2)
)
)
如果您不需要在内部选择中执行任何特定操作,则可以使用
(扁平化(扁平化(表,a1),a2))
现在 BigQuery 已经转移到标准 SQL,使用FLATTEN
不起作用。然而,谷歌已经记录了如何迁移。这个解决方案对我有用,尽管还有其他几种方法可以做到:
SELECT
flattened_field_1,
flattened_field_2
FROM my_dataset.my_table
LEFT JOIN UNNEST(repeated_field_1) AS flattened_field_1
LEFT JOIN UNNEST(repeated_field_2) AS flattened_field_2
# ...etc