我正在尝试运行类似于的查询:
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
Run Code Online (Sandbox Code Playgroud)
我得到"Table1是一个内联表,所以不能在外连接的外部."
当将Join从外部更改为Inner时,它可以工作(因此没有语法问题......).
有人可以解释这个消息,我应该做些什么来避免它?
谢谢
TL; DR:GROUP EACH BY在内部查询中使用.
内部查询
Select a, max(x) as b from Tbl1 group by a
Run Code Online (Sandbox Code Playgroud)
不是平行的.您可以并行计算部分结果,但是为了知道'的max(x)每个值的全局a,您需要只在一个地方运行.JOIN EACH在外部查询中使用时,您将指示需要并行JOIN执行的查询引擎.但是,您没有可兼容的源,因此查询失败.
有两种方法可以解决这个问题:第一种方法是使用内部查询的显式并行版本 - 只需使用GROUP EACH BY而不是GROUP BY.这可以并行执行,因为第一步是按字段对基础表进行排序a,以便您可以计算a并行工作程序中每个字段的全局最大值.如果内部查询是可并行化的,那么外部查询也可以并行执行.这看起来像:
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
Run Code Online (Sandbox Code Playgroud)
第二个选项是使用JOIN而不是JOIN EACH外部查询.这可能会遇到大小限制,具体取决于Table2的大小(因为要进行非每个连接,右侧的表需要为'小'.).
这无疑是次优的; 您必须了解查询引擎的工作方式才能使查询运行.也就是说,我们(在bigquery和dremel团队中)正在努力使查询"正常工作",这样您就不必处理这类问题.我们在这方面取得了一些进展,在过去几个月中已经删除了许多这类错误(例如,内部联接直到最近才会失败),但我们还有很长的路要走.
谢谢让我们注意到这个.我已经提交了一个内部错误,以便我们将来可以更好地完成这项工作.
| 归档时间: |
|
| 查看次数: |
563 次 |
| 最近记录: |