如何将 Bigquery 重复记录转换为列?

Posted

技术标签:

【中文标题】如何将 Bigquery 重复记录转换为列?【英文标题】:How to convert Bigquery repeated record into a column? 【发布时间】:2021-08-31 17:46:37 【问题描述】:

event_params 是重复记录。它的关键值可以是 firebase_event_origin, engagement_time_msec, firebase_screen, ...

根据数据类型,每个键都有多个可选值: string_value, int_value, ... 我想将 key 转换为一列,并且 value 将填充它。

例如:键 firebase_screen 将被转换为列 firebase_screen,其值为 webview screen。表中所有其他重复记录都相同。 我不确定UNNEST 是否是正确的解决方案,因为它将其分解为记录而不是列。

我在这个例子中使用的架构和表格的截图:

【问题讨论】:

【参考方案1】:

您需要先取消嵌套,然后再对数据进行分组。

请将FROM ( ... ) 中的括号替换为您的表格。

SELECT
  date,
  ANY_VALUE(CASE WHEN t.key="firebase_screen" THEN t.string_value ELSE NULL END) AS firebase_screen,
  ANY_VALUE(CASE WHEN t.key="ga_session_number" THEN t.int_value ELSE NULL END) AS ga_session_number,
FROM (
  SELECT
    1 date,
    [STRUCT("firebase_screen" AS key,
      "webs" AS string_value,
      NULL AS int_value),
    STRUCT("ga_session_number" AS key,
      NULL,
      6 AS int_value) ] AS event_params ) AS tbl,
  UNNEST(tbl.event_params) AS t
GROUP BY  1

【讨论】:

以上是关于如何将 Bigquery 重复记录转换为列?的主要内容,如果未能解决你的问题,请参考以下文章

如何将具有重复值的行转换为列?

BigQuery 标准 SQL 如何将行转换为列

保留现有列并将行转换为列[重复]

如何使用 bigrquery 库将非重复记录插入 BigQuery?

如何更改 BigQuery 重复记录的 col 类型

BigQuery:将数组中的键值对转换为列