Google bigquery Google BigQuery要求加入每个人,但我';我已经在用了

Google bigquery Google BigQuery要求加入每个人,但我';我已经在用了,google-bigquery,Google Bigquery,我试图在BigQuery中运行一个查询,它有两个子选择和一个连接,但我无法让它工作。作为一种解决方法,我要做的是自己运行子选择,然后将它们保存为表,然后使用联接执行另一个查询,但我认为我应该能够使用一个查询来完成这项工作 我得到了一个错误: 表太大,无法联接。考虑使用每个连接。有关更多详细信息,请参阅https://developers.google.com/bigquery/docs/query-reference#joins 但我已经在使用一个连接。我尝试过使用交叉连接和使用组,但这些都会给

我试图在BigQuery中运行一个查询,它有两个子选择和一个连接,但我无法让它工作。作为一种解决方法,我要做的是自己运行子选择,然后将它们保存为表,然后使用联接执行另一个查询,但我认为我应该能够使用一个查询来完成这项工作

我得到了一个错误:

表太大,无法联接。考虑使用每个连接。有关更多详细信息,请参阅https://developers.google.com/bigquery/docs/query-reference#joins

但我已经在使用一个连接。我尝试过使用交叉连接和使用组,但这些都会给我带来不同的错误。关于堆栈溢出的其他问题对此没有帮助,一个说这是BigQuery中的一个bug,另一个是使用“交叉连接”的人

下面是我的sql,如果它充满了错误,请原谅,但我认为它应该可以工作:

select
t1.device_uuid,
t1.session_uuid,
t1.nth,
t1.Diamonds_Launch,
t2.Diamonds_Close
from (
    select
    device_uuid,
    session_uuid,
    nth,
    sum(cast([project_id].[table_id].attributes.Value as integer)) as Diamonds_Launch
    from [project_id].[table_id]
    where name = 'App Launch'
    and attributes.Name = 'Inventory - Diamonds'
    group by device_uuid, session_uuid, nth
    ) as t1
join each (
    select
    device_uuid,
    session_uuid,
    nth,
    sum(cast([project_id].[table_id].attributes.Value as integer)) as Diamonds_Close
    from [project_id].[table_id]
    where name = 'App Close'
    and attributes.Name = 'Inventory - Diamonds'
    group by device_uuid, session_uuid, nth
    ) as t2
on t1.device_uuid = t2.device_uuid
and t1.session_uuid = t2.session_uuid

这可以组合为一个查询:

SELECT device_uuid,
       session_uuid,
       nth,
       SUM(IF (name = 'App Launch', INTEGER([project_id].[table_id].attributes.Value), 0)) AS Diamonds_Launch,
       SUM(IF (name = 'App Close', INTEGER([project_id].[table_id].attributes.Value), 0)) AS Diamonds_Close,
FROM [project_id].[table_id]
WHERE attributes.Name = 'Inventory - Diamonds'
GROUP BY device_uuid,
         session_uuid,
         nth

对于大型表,您还必须使用GROUP-EACH。

连接每个表的内部有一个
groupby
groupby
以基数(不同值的数量)命中限制,并且最终分组不可并行化。这限制了BigQuery进行连接的能力

如果将
分组依据
更改为
分组依据
,这很可能会起作用


(是的,我意识到这是令人不快和不标准的。BigQuery团队目前正在努力使这类事情“正常运作”。

感谢奔腾10,我认为应该有一种方法可以通过一个SELECT语句来实现,但我想不出来。