Beam SQL 擴展:Join
Beam SQL 中支援的 JOIN
型別
INNER
、LEFT OUTER
、RIGHT OUTER
- 僅支援等值 Join (其中 Join 條件為等式檢查)
Beam SQL 中不支援的 JOIN
型別
- 不支援
CROSS JOIN
(沒有ON
子句的完整笛卡爾積) - 不支援
FULL OUTER JOIN
(LEFT OUTER
和RIGHT OUTER
Join 的組合)
Join 的情境可以分為 3 種情況
- 有界輸入
JOIN
有界輸入 - 無界輸入
JOIN
無界輸入 - 無界輸入
JOIN
有界輸入
有界 JOIN 有界
使用標準 Join 實作。一個輸入的所有元素會與另一個輸入的所有元素匹配。由於兩個輸入都是有界的,因此不涉及視窗化或觸發。
無界 JOIN 無界
使用標準 Join 實作。一個輸入的所有元素會與另一個輸入的所有元素匹配。
視窗化和觸發
當 Join 無界輸入時,必須滿足以下屬性
- 輸入必須具有相容的視窗,否則將拋出
IllegalArgumentException
。 - 每個輸入上的觸發器在每個視窗中應僅觸發一次。目前,這表示在這種情況下,唯一支援的觸發器是允許零延遲的
DefaultTrigger
。使用任何其他觸發器將導致拋出UnsupportedOperationException
。
這表示輸入是按視窗進行 Join。也就是說,當觸發器觸發時 (僅一次),然後在兩個輸入中目前視窗中的所有元素上執行 Join。這可以推論將會產生什麼樣的輸出。
注意: 與 GroupByKeys
類似,JOIN
將使用 Trigger.continuationTrigger()
更新觸發器。輸入的視窗化策略的其他方面保持不變。
無界 JOIN 有界
對於這種 JOIN
型別,實作會將有界輸入視為 side-input。這表示視窗/觸發是從上游繼承的。