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

如何在BigQuery Standard SQL中实现动态数据逆透视?

在BigQuery中动态将宽表转换为长表(无需硬编码列名)

我们有如下宽表(示例):

productpricecountry
product A2USA
product B3Canada

需要转换为以下长表格式:

productattributevalue
product Aprice2
product AcountryUSA
product Bprice3
product BcountryCanada

由于实际表有300+列且列集经常新增,不能使用硬编码列名的方案。


可以通过BigQuery的动态SQL结合INFORMATION_SCHEMA和UNPIVOT函数实现,无需硬编码列名,自动适配列的新增。

具体实现代码

DECLARE column_list STRING;

-- 从元数据中获取除product外的所有列,拼接为UNPIVOT所需格式
SET column_list = (
  SELECT STRING_AGG(DISTINCT CONCAT('`', column_name, '`'), ', ')
  FROM `your_project.your_dataset.INFORMATION_SCHEMA.COLUMNS`
  WHERE table_name = 'your_table'
    AND column_name != 'product'
);

-- 执行动态生成的UNPIVOT语句
EXECUTE IMMEDIATE FORMAT("""
  SELECT product, attribute, value
  FROM `your_project.your_dataset.your_table`
  UNPIVOT (
    value FOR attribute IN (%s)
  )
""", column_list);

代码说明

  • 自动获取列名:通过查询INFORMATION_SCHEMA.COLUMNS获取目标表的所有列名,排除product列后,用STRING_AGG拼接成UNPIVOT需要的格式。
  • 动态执行逻辑:用EXECUTE IMMEDIATE执行拼接好的SQL语句,FORMAT函数负责将列列表插入到查询模板中。
  • 适配列变化:后续新增的非product列会被自动纳入转换范围,无需手动修改代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 04:23:38