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 字段中取消嵌套多个数组?
如何在 BigQuery 中取消嵌套重复记录,一个数组给出列名,另一个给出列值?