如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值

Posted

技术标签:

【中文标题】如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值【英文标题】:How to get value for every keyname from Array(Struct) type data structre in BigQuery 【发布时间】:2019-07-22 13:08:43 【问题描述】:

我们将 Firebase 事件数据存储在 BigQuery 中。有一列 event_params 是 Array(STRUCT)。我们希望将这些结构键值作为 flat(column) 存储在 mysql 表中。我们正在为每个键做 UNNEST,是否有可能以更智能的方式进行。

SELECT event_name, user_prop.value.string_value AS org_id
            content_type.value.string_value as page_name , contentId.value.string_value as content_id,   
            platform, app_info.version AS app_version,
            event_date            
            FROM `table.name`,
            UNNEST(user_properties) AS user_prop,
            UNNEST(event_params) AS content_type,
            UNNEST(event_params) AS contentId           
            WHERE
            user_prop.key = "OrgId"
            AND
            content_type.key = 'contentType'   
            AND
            contentId.key = 'Id'

【问题讨论】:

不完全确定你在问什么。您有一个 WHERE 子句来获取特定的密钥。删除它,您将获得表中的所有项目。 【参考方案1】:

是的,您可以使用数组子查询来做到这一点 例如

SELECT  
  platform, app_info.version AS app_version,
  event_date,
  (SELECT  value.string_value FROM UNNEST(event_params) WHERE key = 'contentType') AS page_name              
FROM `table.name`        

【讨论】:

以上是关于如何从 BigQuery 中的 Array(Struct) 类型数据结构中获取每个键名的值的主要内容,如果未能解决你的问题,请参考以下文章

从 Bigquery 中的 json 获取数组

如何比较 BigQuery 中的两个数组?

从 json 文件 bigquery 中提取 Json Array 元素

从 bigQuery 中的时间戳聚合变量

如何从 NESTED 字段中的 ARRAY 中删除 STRUCT

在 BigQuery 中选择除 ARRAY_AGG + STRUCT 中的一列之外的所有内容