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

如何在Google BigQuery中将数组结构体展平为列

Google BigQuery 数据转换方案

针对你描述的场景,提供两种实现数据转换的方法:

方法一:直接从原始表(含array<struct<key:string,value:string>>字段)转换

原始表中每个source下的data数组按Date/Country/Brand为一组重复出现,可通过拆分数组、分组、透视三步完成转换:

  1. 用UNNEST将data数组拆分为单行记录
  2. 按source分区,给每3条记录分配一个组ID(对应一组完整的Date/Country/Brand)
  3. 按source和组ID分组,将key值透视成独立字段

对应的BigQuery SQL代码:

WITH unnested_data AS (
  SELECT
    source,
    data.key,
    data.value,
    -- 每3条记录划分为一组,生成组标识
    DIV(ROW_NUMBER() OVER(PARTITION BY source ORDER BY (SELECT NULL)) - 1, 3) AS group_id
  FROM
    `你的项目ID.你的数据集ID.原始表名`
  CROSS JOIN UNNEST(data) AS data
)
SELECT
  source,
  MAX(IF(key = 'Date', value, NULL)) AS date,
  MAX(IF(key = 'Country', value, NULL)) AS country,
  MAX(IF(key = 'Brand', value, NULL)) AS brand
FROM unnested_data
GROUP BY source, group_id
ORDER BY source, date;

注意:如果data数组内的key顺序不是固定的Date→Country→Brand,可以调整ROW_NUMBER()的排序逻辑,替换为实际业务中的顺序字段。

方法二:基于已生成的中间表转换

如果已经得到了中间格式的表,转换逻辑会更简单,直接提取各struct的value字段并重命名即可:

对应的BigQuery SQL代码:

SELECT
  source,
  date.value AS date,
  country.value AS country,
  brand.value AS brand
FROM `你的项目ID.你的数据集ID.中间表名`;

内容的提问来源于stack exchange,提问作者dimi_fn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 02:56:10