2016-01-27 13 views
5

Sono un principiante, cercando di capire come potremmo riscrivere un processo ETL in batch in Google Dataflow. Ho letto alcuni documenti, faccio alcuni esempi.Complesso join con google dataflow

Sto proponendo che il nuovo processo ETL sarà guidato da eventi aziendali (ad esempio una raccolta di dati di origine). Questi farebbero scattare il processo ETL per quella particolare entità aziendale. Il processo ETL estrarrebbe set di dati dai sistemi di origine e quindi passerà quei risultati (PCollections) alla successiva fase di elaborazione. Le fasi di elaborazione coinvolgerebbero vari tipi di join (inclusi join cartesiani e non chiave, ad esempio, date-banded).

Così un paio di domande qui:

(1) è l'approccio che sto proponendo valide & efficiente? Se no, cosa sarebbe meglio, non ho visto alcuna presentazione sui complessi processi ETL reali utilizzando Google Dataflow, solo scenari semplici.

Ci sono prodotti ETL di "livello superiore" che sono più adatti? Ho tenuto d'occhio Spark e Flink per un po '.

Il nostro ETL attuale è moderatamente complesso, sebbene ci siano solo circa 30 tabelle principali (dimensioni e fatti EDW classici) e circa 1000 passaggi di trasformazione. I dati di origine sono complessi (circa 150 tabelle Oracle).

(2) I complessi join non chiave, come dovrebbero essere gestiti?

Sono ovviamente attratto da Google Dataflow perché è prima di tutto un'API e le capacità di elaborazione parallele sembrano un'ottima soluzione (ci viene chiesto di passare dall'elaborazione batch overnight a quella incrementale).

Un buon esempio di Dataflow per questo caso d'uso spingerebbe in avanti l'adozione!

Grazie, Mike S

risposta

6

suona come flusso di dati sarebbe una buona misura. Ti permettiamo di scrivere una pipeline che prende uno PCollection di eventi aziendali ed esegue l'ETL. La pipeline potrebbe essere batch (eseguita periodicamente) o streaming (eseguita ogni volta che arrivano i dati di input).

I vari join sono per la maggior parte relativamente espressi in Dataflow. Per il prodotto cartesiano, è possibile utilizzare side inputs per rendere disponibile il contenuto di un PCollection come input per l'elaborazione di ciascun elemento in un altro PCollection.

È inoltre possibile utilizzare GroupByKey o CoGroupByKey per implementare i join. Questi appiattiscono più input e consentono di accedere a tutti i valori con la stessa chiave in un'unica posizione. È inoltre possibile utilizzare Combine.perKey per calcolare le combinazioni associative e commutative di tutti gli elementi associati a una chiave (ad es., SUM, MIN, MAX, MEDIA, ecc.).

I join data-band suonano come se fossero adatti per windowing che consente di scrivere una pipeline che consuma finestre di dati (ad es. Finestre orari, finestre giornaliere, finestre di 7 giorni che scorrono ogni giorno, ecc.).


Edit: Menzione GroupByKey e CoGroupByKey.

Problemi correlati