BigQuery - 如何取消嵌套多个数组,并从一列分配值?

Posted

技术标签:

【中文标题】BigQuery - 如何取消嵌套多个数组,并从一列分配值?【英文标题】:BigQuery - How to unnest multiple arrays, and distribute values from one column? 【发布时间】:2019-02-06 18:56:55 【问题描述】:

我有一个包含多个数组的表,其中一列就像一个键:

问题是如何取消嵌套这个结构,让每一行也获得rowkey值?

例如:

domain、event、...referrer 也应该有相同的 rowkey?

基本上尝试在整个表上使用 unnest。

SELECT
  *
FROM
  UNNEST(`table.bigtable_analytics.frontend`)
LIMIT
  1000

但是遇到了关于表名的问题:

无法识别的名称:table.bigtable_analytics.frontend at [4:10]

【问题讨论】:

【参考方案1】:

不清楚您的表到底是什么架构,因此下面的示例(对于 BigQuery 标准 SQL)仅使用简化的架构来介绍完成您所要求的方法:each row also gets the rowkey value

简化的虚拟数据是:

Row     rowkey  column.name column.value     
1       key1    domain      aaa.com  
                event       pageload     
                hash        12345    
2       key2    domain2     aaa2.com     
                event2      pageload2    
                hash2       123456789     

#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'key1' rowkey, [STRUCT<name STRING, value STRING>('domain', 'aaa.com'), STRUCT('event', 'pageload'), STRUCT('hash', '12345')] column UNION ALL
  SELECT 'key2', [STRUCT<name STRING, value STRING>('domain2', 'aaa2.com'), STRUCT('event2', 'pageload2'), STRUCT('hash2', '123456789')]
)
SELECT rowkey, x.*
FROM `project.dataset.table` t, t.column x 

结果为

Row rowkey  name    value    
1   key1    domain  aaa.com  
2   key1    event   pageload     
3   key1    hash    12345    
4   key2    domain2 aaa2.com     
5   key2    event2  pageload2    
6   key2    hash2   123456789    

【讨论】:

以上是关于BigQuery - 如何取消嵌套多个数组,并从一列分配值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 BigQuery 标准 SQL 中取消嵌套多个数组

如何在存储为字符串的 bigquery 字段中取消嵌套多个数组?

如何在 BigQuery 中取消嵌套重复记录,一个数组给出列名,另一个给出列值?

为啥在 BigQuery 中取消嵌套两个或多个变量时没有得到任何结果?

在 BigQuery 中取消嵌套多个嵌套字段

如何在BigQuery中创建嵌套字段和数组的数组