如何在BigQuery中合并并去重逗号分隔数字列?
在BigQuery中合并逗号分隔数字列并去重的最优方法
直接通过拆分-去重-聚合的步骤就能实现,这是BigQuery中处理这类需求的高效方案:
假设你的数据表名为your_table,执行以下SQL即可得到目标结果:
SELECT STRING_AGG(DISTINCT trimmed_num, ', ' ORDER BY trimmed_num) AS unique_numbers FROM your_table, UNNEST(SPLIT(numbers, ', ')) AS trimmed_num
步骤说明:
- 拆分字符串:
SPLIT(numbers, ', ')将每行的逗号分隔字符串拆分为数组,这里用,(逗号加空格)作为分隔符,匹配你数据里的格式。 - 展开数组为行:
UNNEST(...)把拆分后的数组展开成单独的行,每个数字占一行,方便后续去重。 - 去重:
DISTINCT trimmed_num过滤掉重复的数字。 - 重新聚合:
STRING_AGG(..., ', ' ORDER BY trimmed_num)把去重后的数字用,连接成字符串,ORDER BY保证结果按数字顺序排列(如果不需要排序可以去掉)。
鲁棒性优化(处理分隔符不统一的情况)
如果你的数据里逗号前后的空格不固定(比如有的是123,983,有的是123 , 983),可以先统一清理格式再拆分:
SELECT STRING_AGG(DISTINCT TRIM(num_part), ', ' ORDER BY TRIM(num_part)) AS unique_numbers FROM your_table, UNNEST(SPLIT(REGEXP_REPLACE(numbers, r'\s*,\s*', ','), ',')) AS num_part
这段代码先用REGEXP_REPLACE把所有逗号前后的空格替换成纯逗号,再拆分,最后用TRIM确保每个数字没有多余空格,兼容更多格式的输入数据。
内容的提问来源于stack exchange,提问作者user2491463
相关产品推荐
相关产品推荐

