Как вы выражаете денормализацию в Apache Beam, которая растягивается в течение длительных периодов времени

В контексте я никогда не использовал Beam. Я пытаюсь понять, как применить модель Beam к обычным случаям использования.

Считайте, что у вас есть неограниченная коллекция Продюсеров и неограниченный набор Продуктов, так что у каждого Продукта есть Продюсер (от одного до многих, Продюсер к Продукту). И у вас есть дополнительное свойство, которое Продукт-производитель появляется перед (или вскоре после) его Продуктом. Но продюсер может появиться за несколько лет до своего Продукта.

Если вы хотите создать неограниченную коллекцию Продуктов вместе со своими Продюсерами, то какой способ это выразить? Наличие оконного соединения, которое растягивает годы, кажется, побеждает точку окна. Но наличие Производителей в качестве бокового ввода не похоже на то, что Производители могут очень близко проявлять себя, когда появляется Продукт.

Есть ли подходящий способ смешать эти две концепции?

Ответы

Ответ 1

Так как Производитель может появиться за несколько лет до своего Продукта, вы можете использовать некоторое внешнее хранилище (например, BigTable) для хранения своих Производителей и написать поток ParDo для Продукта для поиска и выполнить соединение. Чтобы дополнительно оптимизировать производительность, вы можете воспользоваться функцией DoFn с сохранением состояния (читайте этот блог).

Вы можете использовать windowing и CoGroupByKey для объединения в случаях, когда данные продукта доставляются до данных производителя. Тем не менее, окно здесь может быть достаточно маленьким, чтобы обрабатывать нестандартную доставку.