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

如何将BigQuery中Firebase导出数据扁平化 实现每个参数键对应单独列

导出到BigQuery的Firebase数据扁平化方案

方案1:手动指定列(性能最优、适合固定键场景)

你已经用到的UNNEST可以配合子查询或者条件聚合直接实现键转列,不需要额外函数:

无聚合写法(保留原表行数)

如果不需要合并行,直接用子查询从嵌套字段中取对应值即可:

SELECT
  -- 保留原有字段
  event_name,
  event_timestamp,
  user_pseudo_id,
  -- 逐个提取指定键作为单独列,根据值类型选择int_value/string_value/double_value
  (SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'firebase_screen_id') AS firebase_screen_id,
  (SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'board') AS board
FROM `你的项目ID.你的数据集名.你的Firebase导出表名`

聚合写法(适合分组统计场景)

如果需要分组汇总,配合MAX+IF实现:

SELECT
  event_name,
  user_pseudo_id,
  MAX(IF(param.key = 'firebase_screen_id', param.value.int_value, NULL)) AS firebase_screen_id,
  MAX(IF(param.key = 'board', param.value.string_value, NULL)) AS board
FROM `你的项目ID.你的数据集名.你的Firebase导出表名`,
UNNEST(event_params) AS param
GROUP BY event_name, user_pseudo_id -- GROUP BY项包含所有非聚合的原有字段

方案2:动态生成列(适合键多、键不固定场景)

如果需要提取的键数量多,手动写效率低,可以用BigQuery的EXECUTE IMMEDIATE自动生成查询语句批量提取所有键:

EXECUTE IMMEDIATE format("""
SELECT
  event_name,
  event_timestamp,
  user_pseudo_id,
  %s
FROM `你的项目ID.你的数据集名.你的Firebase导出表名`
""",
(
  SELECT STRING_AGG(
    "(SELECT value." || value_type || " FROM UNNEST(event_params) WHERE key = '" || key || "') AS " || key
  )
  FROM (
    -- 先查询当前表中所有存在的参数键和对应的值类型
    SELECT DISTINCT
      param.key,
      CASE
        WHEN param.value.int_value IS NOT NULL THEN 'int_value'
        WHEN param.value.string_value IS NOT NULL THEN 'string_value'
        WHEN param.value.double_value IS NOT NULL THEN 'double_value'
      END AS value_type
    FROM `你的项目ID.你的数据集名.你的Firebase导出表名`,
    UNNEST(event_params) AS param
  )
))

通用说明

  • 如果需要扁平化的是user_properties字段,把上述代码中的event_params替换为user_properties即可,逻辑完全一致
  • 如果存在同一个键有多种值类型的情况,优先保留你需要的类型,或者增加类型判断逻辑处理冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 02:45:03