Unnest 2 级别 - Big Query 数组

Posted

技术标签:

【中文标题】Unnest 2 级别 - Big Query 数组【英文标题】:Unnest 2 levels - Big Query arrays 【发布时间】:2021-05-17 18:05:40 【问题描述】:

考虑具有以下架构的 BQ 表

name
day
day.purchase  

价值观

name     day              day.purchase
John    [1,2]  [ ['Coke', 'Fanta'], ['Pepsi', 'Fanta', 'Water'] ]

如何取消嵌套两个级别以便获得完整的表格?

John 1 'Coke'
John 1 'Fanta'
John 2 'Pepsi'
John 2 'Fanta'
John 2 'Water'

【问题讨论】:

样本数据与描述的数据模型不匹配。 @Marc - 呈现的模式和数据样本根本不匹配!即使您更新了它 - 看起来仍然很错误!我想你的意思是day.id 而不仅仅是day 【参考方案1】:

如果我正确地获取了您的架构以及示例数据 - 下面是要走的路

select name, id as day, purchase
from yourtable t, t.day, day.purchase      

如果应用于您问题中的样本数据 - 输出是

【讨论】:

【参考方案2】:

对于所描述的数据模型,您只需使用:

select n.name, the_day, the_purchase
from names n cross join
     unnest(n.day) the_day cross join
     unnest(the_day.purchase) the_purchase;

对于显示的数据,我认为您有两个单独的列:

select n.name, day, purchase
from names n cross join
     unnest(n.days) day with offset nd join
     unnest(n.purchases) purchase with offset np
     on nd = np

【讨论】:

以上是关于Unnest 2 级别 - Big Query 数组的主要内容,如果未能解决你的问题,请参考以下文章

如何优化 Google Big Query 计费字节数

如何在值列中搜索特定值并在 Big Query SQL 中替换为该特定值?

到 Big Query Data Transfer Service 的 Adwords 报告的值与 Adwords Manager 不同

Big Query 着陆页数字与 Google Analytics 界面不一致

多个 Big Query 表或类似数据的单数表

要在本地机器中提取为 JSON 的 Big Query 表