TL; DR:使用在內部查詢。
內部查詢
Select a, max(x) as b from Tbl1 group by a
不parallizable。您可以並行計算部分結果,但爲了知道每個值爲a
'的全局max(x)
',您只需要在一個地方運行該結果。在外部查詢中使用JOIN EACH
時,您正在指示查詢引擎需要並行執行JOIN
執行。但是,您沒有可寬容的來源,因此查詢失敗。
有兩種方法可以解決此問題:第一種方法是使用內部查詢的明確並行版本 - 只需使用而不是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
第二個選項是對外部查詢使用JOIN
代替JOIN EACH
。這可能會遇到大小限制,具體取決於Table2的大小(因爲要執行非每個連接,右側的表需要'小')。
這是公認的次佳;您必須瞭解查詢引擎如何工作才能使查詢運行。也就是說,我們(在bigquery和dremel團隊中)正在努力使查詢「正常工作」,以便您不必處理這類問題。我們正在取得一些進展,在過去的幾個月裏,這些類型的錯誤已被刪除(例如,直到最近一次內部連接也會失敗),但我們仍有一段路要走。
感謝您將此引入我們的注意。我提交了一個內部錯誤,以便我們可以在將來更好地完成這項工作。