BigQuery中合并两个ARRAY_AGG结果,避免两次调用的实现方法
在BigQuery中单次查询获取多个去重数组列的解决方案
你完全可以在单次查询中同时生成两个去重数组列,甚至直接输出你需要的JSON格式结果,不需要发起两次调用,也不需要替换ARRAY_AGG函数。以下是两种实现方式:
方式1:直接返回两个数组列
这种方式最直接,一次查询就能得到col1_list和col2_list两个列,符合常规的数据返回格式:
SELECT ARRAY_AGG(DISTINCT col1) AS col1_list, ARRAY_AGG(DISTINCT col2) AS col2_list FROM table1
方式2:返回JSON格式结果
如果需要直接输出类似{"col1_list":[v1,v2], "col2_list": [v3,v4]}的JSON对象,可以用TO_JSON_STRING结合STRUCT来打包结果:
SELECT TO_JSON_STRING(STRUCT( ARRAY_AGG(DISTINCT col1) AS col1_list, ARRAY_AGG(DISTINCT col2) AS col2_list )) AS result_json FROM table1
说明
ARRAY_AGG(DISTINCT ...)支持在同一个查询中多次使用,分别针对不同列计算去重数组,完全不需要拆分两次查询或者用UNION(UNION用于合并行数据,不适合这种同时计算多列聚合的场景)。- 两种方式都只需要扫描一次
table1,性能比两次调用更高效。
内容的提问来源于stack exchange,提问作者curiousengineer
相关产品推荐
相关产品推荐

