你如何表达Apache Beam中长时间延伸的非规范化连接

时间:2017-11-14 21:45:26

标签: apache-beam

对于上下文,我从未使用过Beam。我试图了解如何将Beam模型应用于常见用例。

考虑到你有一个无限的Producer集合和一个无限的产品集合,这样每个产品都有一个Producer(一对多,Producer到Product)。并且您拥有产品生产者在其产品之前(或之后不久)出现的附加属性。但制作人可能会在其产品出现之前几年出现。

如果您想制作一个无限制的产品系列,并且他们的制作人与他们一起加入,那么表达这种产品的恰当方式是什么?拥有延长多年的窗口连接似乎打败了窗口的点。但是,将生产者作为副作用并不能解决生产者在产品何时出现时可能非常接近的问题。

是否有合适的方法来混合这两个概念?

1 个答案:

答案 0 :(得分:5)

由于制作人可能会在其产品之前出现数年,因此您可以使用一些外部存储(例如BigTable)来存储您的制作人,并为产品流编写ParDo以进行查找和执行连接。为了进一步优化性能,您可以利用有状态DoFn功能进行批量查找(结帐this博客)。

对于在Producer数据之前传递Product数据的情况,您仍然可以使用windowing和CoGroupByKey进行连接。但是,这里的窗口可以足够小,只是为了处理无序交付。