我的架构包含多个未嵌套的重复字段。
我正在尝试查询交叉产品,但是我收到错误: “无法查询重复字段的交叉积......”
如果我只查询2个重复的字段,我可以展平其中一个字段。然而,我有兴趣查询更多2个重复的字段,我无法理解FLATTEN语法如何支持它。
例如,表结构是: a1,记录(重复):a1.b1,整数 a2,记录(重复):a2.b1,整数 a3,记录(重复):a3.b1,整数
我想查询: 从标签
中选择(*)答案 0 :(得分:14)
您可以在FLATTEN
中使用嵌套的子选择。它需要在select语句周围添加额外的paren。 (不幸的是,语法有点难看)。 e.g。
SELECT
...
FROM (
FLATTEN((
SELECT
...
FROM (
FLATTEN((
SELECT
...
FROM
table),
f1)
)
),
f2)
)
)
答案 1 :(得分:7)
如果您不需要在内部选择内部执行任何特定操作,则可以使用
(FLATTEN(FLATTEN(表,a1),a2))
答案 2 :(得分:0)
现在BigQuery已移至标准SQL,无法使用FLATTEN
。但是Google has documented how to migrate。尽管有其他几种方法可以使用此解决方案,但我仍然可以使用它:
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