2017-11-14 22 views
19

Dla kontekstu nigdy nie używałem Beam. Próbuję zrozumieć, jak zastosować model belki do typowych przypadków użycia.W jaki sposób można wyrazić denormalization joins w Apache Beam, które rozciągają się na długie okresy czasu?

Weź pod uwagę, że masz nieograniczoną kolekcję Producentów i nieograniczoną kolekcję Produktów, tak, że każdy Produkt ma Producenta (jeden do wielu, od Produktu do Produktu). I masz dodatkową właściwość, którą Producent Produktu pojawia się przed (lub wkrótce po) jego Produkcie. Ale producent może pojawić się na wiele lat przed swoim produktem.

Jeśli chcesz stworzyć nieograniczoną kolekcję Produktów wraz z ich Producentami, to co jest właściwym sposobem na wyrażenie tego? Posiadanie połączenia okienkowego, które rozciąga się na lata, zdaje się przekreślać punkt okna. Ale posiadanie producentów jako wkładu nie wydaje się zajmować tym, że producenci mogą pojawić się bardzo blisko, gdy pojawi się produkt.

Czy istnieje odpowiedni sposób na połączenie tych dwóch koncepcji?

Odpowiedz

3

Ponieważ producent może pojawić się na wiele lat przed swoim produktem, możesz użyć pamięci zewnętrznej (np. BigTable) do przechowywania swoich producentów i napisać strumień ParDo dla strumienia produktów, aby wykonać wyszukiwanie i wykonać dołączenie. Aby jeszcze bardziej zoptymalizować wydajność, możesz skorzystać z funkcji Stateful DoFn do wyszukiwania wsadowego (blog this).

Nadal można używać okien i CoGroupByKey do łączenia w przypadkach, w których dane produktu są dostarczane przed danymi producenta. Jednak okno może być na tyle małe, aby poradzić sobie z dostawą poza zamówieniem.