You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将BigQuery表中REPEATED模式的INT/STRING转为逗号分隔列表

解决BigQuery中REPEATED类型字段的转换问题

针对你提到的普通INTEGER/STRING类型的REPEATED字段,以下是两种常见需求的实现方案:

1. 转换为逗号分隔的字符串

使用BigQuery内置的ARRAY_TO_STRING函数可以直接将REPEATED数组转换为指定分隔符的字符串,无需展开数组,效率更高:

SELECT
  -- 假设你的表有唯一标识字段id,以及两个REPEATED字段
  id,
  -- 整数类型需要先转成字符串再拼接
  ARRAY_TO_STRING(repeated_integer_field, ',') AS comma_separated_ints,
  -- 字符串类型可直接拼接
  ARRAY_TO_STRING(repeated_string_field, ',') AS comma_separated_strs
FROM your_table_name

如果需要对数组元素做去重、排序后再拼接,可以结合ARRAY()构造器:

SELECT
  id,
  ARRAY_TO_STRING(
    ARRAY(SELECT DISTINCT val FROM UNNEST(repeated_integer_field) AS val ORDER BY val),
    ','
  ) AS sorted_deduplicated_ints
FROM your_table_name

2. 处理后保留ARRAY类型

如果需要对原REPEATED数组做清洗(比如去重、过滤、排序)后仍保留数组格式,使用ARRAY()构造器配合UNNEST实现:

SELECT
  id,
  -- 对整数数组去重并排序
  ARRAY(SELECT DISTINCT val FROM UNNEST(repeated_integer_field) AS val ORDER BY val) AS cleaned_int_array,
  -- 过滤字符串数组中的空值
  ARRAY(SELECT val FROM UNNEST(repeated_string_field) AS val WHERE val IS NOT NULL) AS filtered_str_array
FROM your_table_name

关于UNNEST的误区

如果之前使用UNNEST后得到的是多行数据而非聚合结果,是因为UNNEST会将数组的每个元素拆分为单独行。此时需要通过GROUP BY结合STRING_AGG(转字符串)或ARRAY_AGG(重新生成数组)来聚合回单行:

-- 用STRING_AGG的方式转逗号分隔字符串(等价于ARRAY_TO_STRING)
SELECT
  id,
  STRING_AGG(CAST(repeated_integer_field AS STRING), ',') AS comma_separated_ints
FROM your_table_name, UNNEST(repeated_integer_field) AS repeated_integer_field
GROUP BY id

内容的提问来源于stack exchange,提问作者Nik M.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 04:22:21