Beam SQL 扩展:联接
Beam SQL 中支持的联接类型
INNER
、LEFT OUTER
、RIGHT OUTER
- 仅支持等值连接(联接条件是相等检查)
Beam SQL 中不支持的联接类型
- 不支持
CROSS JOIN
(没有ON
子句的完全笛卡尔积) - 不支持
FULL OUTER JOIN
(LEFT OUTER
和RIGHT OUTER
联接的组合)
联接场景可以分为三种情况
- 有界输入联接有界输入
- 无界输入联接无界输入
- 无界输入联接有界输入
有界联接有界
使用标准联接实现。一个输入中的所有元素都与另一个输入中的所有元素匹配。由于两个输入都是有界的,因此不涉及窗口化或触发。
无界联接无界
使用标准联接实现。一个输入中的所有元素都与另一个输入中的所有元素匹配。
窗口化和触发
联接无界输入时,必须满足以下属性
- 输入必须具有兼容的窗口,否则将抛出
IllegalArgumentException
。 - 每个输入上的触发器应仅在每个窗口触发一次。目前这意味着在这种情况下唯一支持的触发器是
DefaultTrigger
,允许零延迟。使用任何其他触发器将导致抛出UnsupportedOperationException
。
这意味着输入在每个窗口进行联接。也就是说,当触发器触发(仅一次)时,就会在两个输入的当前窗口中的所有元素上执行联接。这允许对将要产生的输出类型进行推理。
注意:类似于 GroupByKeys
,JOIN
将使用 Trigger.continuationTrigger()
更新触发器。输入窗口化策略的其他方面保持不变。
无界联接有界
对于这种类型的联接,有界输入被实现视为侧输入。这意味着窗口/触发器是从上游继承的。