see*_*ss1 6 sql struct flatten google-bigquery google-cloud-platform
在 BigQuery 中展平两个数组的结构的正确方法是什么?我有一个如图所示的数据集(struct.destination 和 struct.visitors 数组是有序的 - 即访问者计数专门对应于同一行中的目的地):
我想重新组织数据,以便为每个独特的出发地和目的地组合计算总访客数。理想情况下,最终结果将如下所示:
我尝试连续两次使用 UNNEST - 一次在 struct.destination 上,然后在 struct.visitors 上,但这会产生错误的结果(每个目的地都映射到访问者计数数组中的每个值,而它应该只映射到值在同一行):
SELECT
origin,
unnested_destination,
unnested_visitors
FROM
dataset.table,
UNNEST(struct.destination) AS unnested_destination,
UNNEST(struct.visitors) AS unnested_visitors
Run Code Online (Sandbox Code Playgroud)
你有一个重复的结构。所以,我认为你想要:
SELECT origin,
s.destination,
s.visitors
FROM dataset.table t CROSS JOIN
UNNEST(t.struct) s;
Run Code Online (Sandbox Code Playgroud)
编辑:
我明白了,你有一个由两个数组组成的结构。你可以做:
SELECT origin, d.destination, v.visitors
FROM dataset.table t CROSS JOIN
UNNEST(struct.destination) s WITH OFFSET nd LEFT JOIN
UNNEST(struct.visitors) v WITH OFFSET nv
ON nd = nv
Run Code Online (Sandbox Code Playgroud)