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

如何在BigQuery中对Struct类型执行Unpivot操作?

报错原因

你执行UNPIVOT时直接引用的Last_7_Days等字段属于嵌套struct的子字段,并非表的顶层字段,SQL解析时无法直接识别到这些子字段名称,因此触发报错。

解决方案

方案1:先提取struct子字段为顶层列再UNPIVOT

先通过子查询将struct内部的所有需要转换的子字段提取为顶层列,再执行UNPIVOT操作,语法如下:

SELECT 
  UA.ID, -- 可在此处添加你需要保留的其余非struct字段
  UA.struct字段名.Last_7_Days,
  UA.struct字段名.Last_14_Days,
  UA.struct字段名.Last_30_Days,
  UA.struct字段名.Last_90_Days,
  UA.struct字段名.First_Date_AEST,
  UA.struct字段名.Last_Date_AEST
FROM `business-analytics-workbench.RAW.User_Activity` as UA
UNPIVOT(
  Activity FOR PERIOD IN (
    Last_7_Days,
    Last_14_Days,
    Last_30_Days,
    Last_90_Days,
    First_Date_AEST,
    Last_Date_AEST
  )
)

注意:将上述代码中的struct字段名替换为你表中存储周期指标的struct类型字段的实际名称。

方案2:使用UNNEST直接拆分struct生成行

无需提前展开字段,通过UNNEST函数直接构造行数据,代码更简洁:

SELECT 
  UA.ID, -- 可在此处添加你需要保留的其余非struct字段
  PERIOD,
  Activity
FROM `business-analytics-workbench.RAW.User_Activity` as UA,
UNNEST([
  STRUCT("Last_7_Days" AS PERIOD, UA.struct字段名.Last_7_Days AS Activity),
  STRUCT("Last_14_Days" AS PERIOD, UA.struct字段名.Last_14_Days AS Activity),
  STRUCT("Last_30_Days" AS PERIOD, UA.struct字段名.Last_30_Days AS Activity),
  STRUCT("Last_90_Days" AS PERIOD, UA.struct字段名.Last_90_Days AS Activity),
  STRUCT("First_Date_AEST" AS PERIOD, UA.struct字段名.First_Date_AEST AS Activity),
  STRUCT("Last_Date_AEST" AS PERIOD, UA.struct字段名.Last_Date_AEST AS Activity)
])

注意:同样需要将struct字段名替换为你表中对应struct字段的实际名称。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 10:45:03