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

在BigQuery中如何将多列转换为RECORD或键值对数组?

解决方案:BigQuery将多列转换为键值对行

我来帮你搞定这个宽表转键值对长表的需求!在BigQuery里,用UNNEST结合数组构造的方式就能简洁实现,下面是具体的实现步骤和代码:

核心SQL示例

假设你的源表是your_dataset.your_table,执行以下SQL就能得到你想要的结果:

SELECT
  id,
  Name,
  kv.Key,
  kv.Value
FROM
  `your_dataset.your_table`,
  UNNEST([
    STRUCT('DOB' AS Key, DOB AS Value),
    STRUCT('Sex' AS Key, Sex AS Value)
  ]) AS kv

逻辑解释

  1. 构造键值对数组:用STRUCT('列名' AS Key, 列值 AS Value)把每一列的名称和对应值打包成结构体,再把这些结构体放到一个数组中
  2. 拆分数组为行:通过UNNEST()函数将数组拆分成独立的行,这样每一个键值对就对应一行数据

扩展说明

  • 如果需要转换更多列,只需要在UNNEST的数组里继续添加STRUCT元素即可,比如新增Email列的话,就加STRUCT('Email' AS Key, Email AS Value)
  • 如果各列数据类型不一致,Value列会自动转换为兼容的通用类型(比如字符串)。如果需要强制统一类型,可以显式转换,比如CAST(DOB AS STRING) AS Value

执行上述SQL后,你的源数据就会转换成期望的目标表结构:

IdNameKeyValue
1FredDOB01.01.2001
1FredSexM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 10:17:29