在BigQuery中合并两张结构相同的嵌套数组表(无需使用UNNEST函数)
在BigQuery中合并两张结构相同的嵌套数组表(无需使用UNNEST函数)
看起来你需要合并两张结构一致的嵌套表,优先保留第一张表的重复key数据,同时因为数据量巨大,不想用UNNEST来避免性能损耗对吧?我给你一个简单高效的方案:
WITH combined_data AS ( SELECT *, 1 AS source_priority FROM `your-project.dataset.table1` UNION ALL SELECT *, 2 AS source_priority FROM `your-project.dataset.table2` ) SELECT key, A FROM combined_data QUALIFY ROW_NUMBER() OVER (PARTITION BY key ORDER BY source_priority) = 1 -- 如果你需要和示例里的输出顺序一致,可以调整排序规则,比如: -- ORDER BY CASE key WHEN 1 THEN 1 WHEN 3 THEN 2 WHEN 4 THEN 3 WHEN 5 THEN 4 WHEN 6 THEN 5 WHEN 2 THEN 6 END
方案说明:
- 先用
UNION ALL把两张表合并,同时给Table1标记最高优先级(1),Table2标记次优先级(2),确保重复key时优先保留Table1的记录 - 借助
QUALIFY和ROW_NUMBER()窗口函数,按key分区,同一个key下按优先级排序,只保留行号为1的记录——也就是每个key仅保留优先级最高的那条数据 - 全程不需要使用
UNNEST,所有操作基于整行和嵌套字段直接处理,完美适配大数据量场景,避免了展开嵌套数组带来的性能损耗
如果你不需要特定的输出排序,直接去掉最后的ORDER BY部分即可,BigQuery会按最优的方式返回结果。
备注:内容来源于stack exchange,提问作者Hbaieb Ahmed
相关产品推荐
相关产品推荐

