加入“辅助”键的惯用方式

时间:2018-11-20 17:35:39

标签: apache-beam

如果我们有一个像这样的流

Person {
     …
     OrganizationID
}

我们想加入另一个流

Organization {
     ID
     …
}

创建类似这样的复合记录:

Person {
     …
     Organization {
           ID
           …
     }
}

Apache Beam编程模型中,惯用最有效的方法是什么?

NB:已经看到推荐side input作为类似问题的解决方案,但由于此处的影响是每次更改 {{ 1}} Person应该产生新的扩充Organization记录。

1 个答案:

答案 0 :(得分:1)

编辑:

答案是,由于缺少Apache Beam实现中的撤消功能,Apache Beam不支持您的示例。

================================================ ====

原始答案:

您可能要检查Apache Beam中的Join库[1]。

加入Beam模型需要额外考虑流中的窗口化策略。听起来您的流不需要开窗,所以说您的流都在全局窗口中。但是,如果您在两个流上都设置了全局窗口,则使用默认触发器并像Beam的Join库一样进行Join,由于水印永远不会通过无尽的窗口,因此Join将不会发出任何结果。但是,如果您重复设置数据驱动的触发器(一旦看到足够多的元素,便会触发),但是由于缺少对Beam撤回的支持,尚不清楚如何为Join优化预发布结果。

[1] https://github.com/apache/beam/blob/master/sdks/java/extensions/join-library/src/main/java/org/apache/beam/sdk/extensions/joinlibrary/Join.java#L49