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

如何将BigQuery中重复记录event_params的键值转换为对应列?

解决方案

你要实现的是嵌套重复字段的行转列操作,针对event_params结构有两种常用实现方式,都不会产生多余的拆分行:

方案1:子查询直接取值(适合提取的参数key较少的场景)

这种写法不需要全局拆行,子查询内的UNNEST仅针对当前行的event_params数组匹配取值,性能更优:

SELECT
  -- 可自行补充需要保留的原表字段,例如 event_name、event_timestamp、user_pseudo_id 等
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'firebase_event_origin') AS firebase_event_origin,
  (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'engagement_time_msec') AS engagement_time_msec,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'firebase_screen') AS firebase_screen
FROM
  `你的项目ID.你的数据集.你的表名`

你可以根据参数的实际类型,切换取value.string_value/value.int_value/value.float_value/value.double_value字段。

方案2:PIVOT语法(适合需要提取大量参数key的场景)

如果需要转换的参数数量较多,可以用PIVOT语法简化代码:

SELECT * FROM (
  SELECT
    -- 先列出所有需要保留的原表非嵌套字段
    event_name,
    event_timestamp,
    user_pseudo_id,
    ep.key,
    -- 统一取出参数值,不同类型做兼容处理
    COALESCE(
      ep.value.string_value, 
      CAST(ep.value.int_value AS STRING), 
      CAST(ep.value.float_value AS STRING), 
      CAST(ep.value.double_value AS STRING)
    ) AS param_value
  FROM `你的项目ID.你的数据集.你的表名`,
  UNNEST(event_params) ep
  -- 可过滤仅需要转换的key,减少计算量
  WHERE ep.key IN ('firebase_event_origin','engagement_time_msec','firebase_screen')
)
PIVOT (
  MAX(param_value)
  FOR key IN ('firebase_event_origin','engagement_time_msec','firebase_screen')
)

如果需要保留数值类型的参数值,可在查询结果中对对应列单独做CAST类型转换即可。

参考截图

表结构
表数据


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:06:02