gpt4 book ai didi

google-bigquery - "My Alias"是内联表,因此不能位于外连接的外部

转载 作者:行者123 更新时间:2023-12-04 15:11:37 25 4
gpt4 key购买 nike

我正在尝试运行类似于以下内容的查询:

Select Table1.a,Table1.b,Table2.c
From
(Select a, max(x) as b
from Tbl1
group by a
) as Table1
LEFT JOIN EACH Table2
ON
Join Condition

我得到“Table1 是一个内联表,所以不能在外连接的外部。”

将 Join 从 Outer 更改为 Inner 时,它可以工作(因此没有语法问题......)。

有人可以解释一下这条消息,我应该怎么做才能避免它?

谢谢

最佳答案

TL;DR:使用 GROUP EACH BY在内部查询中。

内部查询

Select a, max(x) as b from Tbl1  group by a 

不可并行化。您可以并行计算部分结果,但为了了解全局 max(x)对于 a 的每个值',你只需要在一个地方运行。当您使用 JOIN EACH在外部查询中,您指示查询引擎您需要并行化 JOIN执行。但是,您没有可并行化的源,因此查询失败。

有两种方法可以解决这个问题:第一种是使用内部查询的显式并行版本——只需使用 GROUP EACH BY而不是 GROUP BY .这可以并行执行,因为第一步是按 a 对底层表进行排序。字段,以便您可以计算每个 a 的全局最大值并行 worker 中的字段。如果内部查询是可并行的,那么外部查询也可以并行执行。这看起来像:
Select Table1.a,Table1.b,Table2.c
From
(Select a, max(x) as b
from Tbl1
group EACH by a -- note the EACH keyword here
) as Table1
LEFT JOIN EACH Table2
ON
Join Condition

第二个选项是使用 JOIN而不是 JOIN EACH在外部查询上。这可能会遇到大小限制,具体取决于 Table2 的大小(因为要进行非每个连接,右侧的表需要“小”。)。

这无疑是次优的;您必须了解查询引擎的工作原理才能使您的查询运行。也就是说,我们(在 bigquery 和 dremel 团队中)正在努力使查询“正常工作”,以便您不必处理此类问题。我们在这方面取得了一些进展,在过去几个月中已经消除了许多此类错误(例如,直到最近内部联接也会失败),但我们还有很长的路要走。

谢谢让我们注意到这个。我已经提交了一个内部错误,以便我们将来可以更好地完成这项工作。

关于google-bigquery - "My Alias"是内联表,因此不能位于外连接的外部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com