2016-01-27 22 views
5

Jestem początkującym, próbującym zrozumieć, jak możemy ponownie zapisać proces wsadowy ETL w Google Dataflow. Czytałem niektóre dokumenty, uruchom kilka przykładów.Kompleksowe dołączanie do przepływu danych Google

Proponuję, aby nowy proces ETL był sterowany przez zdarzenia biznesowe (np. Będą one wyzwalać proces ETL dla tej konkretnej jednostki biznesowej. Proces ETL wydobywa zbiory danych z systemów źródłowych, a następnie przekaże te wyniki (PCollections) na następny etap przetwarzania. Etapy przetwarzania obejmowałyby różne rodzaje połączeń (w tym połączenia kartezjańskie i inne niż kluczowe, na przykład pasmo dat).

więc kilka pytań tutaj:

(1) jest podejście, że jestem proponuje ważny & wydajny? Gdyby nie to, co byłoby lepsze, nie widziałem żadnych prezentacji złożonych procesów ETL w świecie rzeczywistym przy użyciu Google Dataflow, tylko proste scenariusze.

Czy istnieją produkty ETL "wyższego poziomu", które są lepiej dopasowane? Przez jakiś czas obserwowałem Spark i Flink.

Nasz obecny ETL jest umiarkowanie złożony, chociaż istnieje tylko około 30 tabel podstawowych (klasyczne wymiary i fakty EDW) oraz ~ 1000 kroków transformacji. Dane źródłowe są złożone (około 150 tabel Oracle).

(2) Złożone nie-kluczowe połączenia, w jaki sposób będą one obsługiwane?

Jestem oczywiście zainteresowana przepływem danych Google, ponieważ jest to przede wszystkim API, a możliwości przetwarzania równoległego wydają się bardzo dobre (jesteśmy proszeni o przejście z partii na noc do przetwarzania przyrostowego).

Dobrze działający przykład Dataflow dla tego przypadku użycia naprawdę popchnie adopcję do przodu!

Dzięki, Mike S

Odpowiedz

6

Brzmi jak dataflow byłoby dobrym rozwiązaniem. Umożliwiamy napisanie potoku, który zajmuje PCollection zdarzeń biznesowych i wykonuje ETL. Potok może być albo wsadowy (wykonywany okresowo), albo przesyłany strumieniowo (wykonywany zawsze, gdy nadejdą dane wejściowe).

Poszczególne sprzężenia są w większości relatywnie wyrażalne w przepływie danych. W przypadku produktu kartezjańskiego można spojrzeć na użycie side inputs, aby udostępnić zawartość PCollection jako dane wejściowe do przetwarzania każdego elementu w innym PCollection.

Możesz również sprawdzić, czy do implementacji łączenia używasz GroupByKey lub CoGroupByKey. Spłaszczają one wiele wejść i umożliwiają dostęp do wszystkich wartości za pomocą tego samego klawisza w jednym miejscu. Możesz także użyć Combine.perKey do obliczenia asocjacyjnych i przemiennych kombinacji wszystkich elementów powiązanych z kluczem (np. SUMA, MIN, MAKS, ŚREDNIA, itp.).

Łączenia datowane na paski brzmią, jakby były dobrze dopasowane do windowing, co umożliwia napisanie potoku zużywającego okna danych (np. Okna godzinowe, okna dzienne, okna 7-dniowe przesuwające się codziennie itd.).


Edit: Wspomnij GroupByKey i CoGroupByKey.

Powiązane problemy