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

How do you express denormalization joins in Apache Beam that stretch over long periods of time

就上下文而言,我从未使用过 Beam。我正在尝试了解如何将 Beam 模型应用于常见用例。

假设您有一个无限的生产者集合和一个无限的产品集合,这样每个产品都有一个生产者(一对多,生产者到产品)。并且您有额外的 属性 产品的生产者出现在其产品之前(或之后不久)。但是生产者可能比其产品早几年出现。

如果你想生产一个无限制的产品集合,他们的生产者与他们一起,什么是适当的表达方式?有一个 windowed 连接延长了数年似乎打败了 window 的要点。但是,将生产者作为辅助输入似乎无法处理生产者可能与产品出现的时间非常接近的情况。

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

由于 Producer 可能比其 Product 早几年出现,您可以使用一些外部存储(例如 BigTable)来存储您的 Producer 并为 Product stream 编写一个 ParDo 来进行查找和执行连接。为了进一步优化性能,您可以利用有状态的 DoFn 功能来批量查找(查看 this 博客)。

您仍然可以使用 windowing 和 CoGroupByKey 来连接产品数据先于生产者数据的情况。然而,这里的 window 可以足够小以处理乱序交付。