Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nested BigQuery SQL:将视图A中的子查询作为嵌套表嵌入视图B中_Nested_Google Bigquery - Fatal编程技术网

Nested BigQuery SQL:将视图A中的子查询作为嵌套表嵌入视图B中

Nested BigQuery SQL:将视图A中的子查询作为嵌套表嵌入视图B中,nested,google-bigquery,Nested,Google Bigquery,我正在尝试使用标准SQL将两个平面、相关的BigQuery视图中的数据合并到单个嵌套表体系结构中 我有两张类似的表格: 分析数据:全球时间跨度内每分钟一行 ------------------------------------------------------------------- minute_index | users | users_new | ... -----------------------------------------------------------------

我正在尝试使用标准SQL将两个平面、相关的BigQuery视图中的数据合并到单个嵌套表体系结构中

我有两张类似的表格:

分析数据:全球时间跨度内每分钟一行

-------------------------------------------------------------------
minute_index | users | users_new | ...
-------------------------------------------------------------------
     1312017 |     8 |         3 | ...
     1312018 |     9 |         2 | ...
     1312019 |     5 |         1 | ...
     1312020 |     3 |         0 | ...
     1312021 |     5 |         2 | ...
     1312023 |     4 |         3 | ...
     1312024 |     7 |         4 | ...
     1312025 |     6 |         3 | ...
     1312026 |     9 |         4 | ...
事件数据:发生的每个外部事件对应一行

----------------------------------------
minute_index | event                   |
----------------------------------------
     1312019 | "TV Spot Broadcast"     |
     1312023 | "Radio Spot Broadcast"  |
     1312026 | "Radio Spot Broadcast"  |
我试图将它们合并到一个表中,其中新表中的每一行都包含分析表的子集,该子集跨越该表和以下几分钟(我们称之为5分钟):

-----------------------------------------------------------------------------
minute_index | event                    | window_treated                   |
-----------------------------------------------------------------------------
     1312019 | "TV Spot Broadcast"      | minute_index | users | users_new |
                                        |------------------------------------
                                        |      1312019 |     5 |         1 |
                                        |      1312020 |     3 |         0 |
                                        |      1312021 |     5 |         2 |
                                        |      1312023 |     4 |         3 |
                                        |      1312024 |     7 |         4 |
-----------------------------------------------------------------------------
     1312023 | "Radio Spot Broadcast"   | minute_index | users | users_new |
                                        |------------------------------------
                                        |      1312023 |     4 |         3 |
                                        |      1312020 |     3 |         0 |
                                        |      1312021 |     5 |         2 |
                                        |      1312023 |     4 |         3 |
                                        |      1312024 |     7 |         4 |
实际上,我已经能够像这样构造嵌套表了,但是只有通过构建和连接复杂的中间表集合,这些中间表显然比它们应该复杂得多,如果我只能在一个查询中找出如何做这类事情的话

这只是我尝试过的各种方法的一个例子

选择 时间戳作为时间戳, ed.minute_索引作为minute_索引, 选择为结构 广告分钟索引,广告用户,广告用户新 来自'my_project.my_dataset.analytics_data'广告 其中ad.minute\u index>=ed.minute\u index 和ad.minute_索引
Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN.

下面是BigQuery标准SQL

#standardSQL
SELECT 
  ed.minute_index, 
  event, 
  ARRAY_AGG(ad) window_treated
FROM `my_project.my_dataset.event_data` ed
JOIN `my_project.my_dataset.analytics_data` ad
ON ad.minute_index BETWEEN ed.minute_index AND ed.minute_index + 5
GROUP BY ed.minute_index, event   
如果应用于您问题中的样本数据,结果如下


正如您所看到的,我严格遵循了错误消息中的建议,即不支持引用其他表的相关子查询,除非它们可以被解除相关,例如通过将它们转换为有效的联接。并将相关子查询转换为JOIN

我在这里找到了一小部分接近但不完全正确的答案,比如这一个--但它们通常不能为我需要去哪里提供足够的指导。非常感谢,@mikhail-我真的希望你能插话;说得清楚一点,我确实明白这基本上是我需要做的,但是我尝试了你所描述的方法的几种变体,并且反复绕着轴,试图找出使用ARRAY_AGG、ARRAY‘with GROUP BY、SELECT AS STRUCT’等的确切语法。有道理。现在希望这个模式能在将来帮助你们:实际上,我认为我的一个核心问题是出于习惯而使用左连接,而不是裸连接/内部连接。我曾经尝试过与你的建议非常相似的东西,但是不断地被留下来。如果没有一个条件,即连接两边的字段相等,则不能使用外部连接。如果我对剩下的模式有足够的信心,我可能会马上意识到我应该使用一个内部连接,但当时我已经绞尽脑汁了,这只是又一个错误,这意味着我需要了解h-ll到底发生了什么。@LaurentStanevich-我知道你没有接受答案-有什么特别的原因吗?只是好奇不,一点也不。我认为这可能只是一个错误的点击。事实上,现在我正在考虑这个问题,我想这可能是我的新型触摸屏笔记本电脑的一个问题。我正在向我的儿子解释你的解决方案,他是一名计算机科学专业的学生,今年夏天和我一起实习。我猜,当我兴奋地在屏幕上做手势时,我可能无意中点击了复选标记。