2017-07-12 6 views
0

Meine geplanten Fluss ist wie folgt:Talend - Ausgabe von tReplicate Subjob

        subJob1 

            /
tOracleInput -> tMap -> tReplicate -- subJob2 
            \ 
            subJob3 

Die Idee ist, die DB nur einmal für diese große SQL-Ansicht abfragen, die Ausgabe zu replizieren und zu Teilaufträge übergeben, so kann es parallel bearbeitet werden. Um einen Überblick über das, was der Subjob tun würde:

componentToCatchOutputFromParent -> tMap -> tFileOutput 
           /
tOracleInput (query from view) 

Was das bedeutet ist die SQL-view1 abfragen (für subjob1, verschiedene Ansichten für verschiedene Teilaufträge) (dies erwartet wird, sehr leicht Abfrage zu sein, die schwere Abfrage ist die von Parent, also Idee ist, die schwere Abfrage des Elternteils einmal auszuführen und wiederzuverwenden), verbinde diese mit der Ausgabe von dem Elternteil unter Verwendung eines Primärschlüssel-Fremdschlüsselkonzepts und gebe sie in eine Datei aus.

Zweck ist, zu versuchen, die Verarbeitung von Daten zu beschleunigen, indem die Datenbankaufrufe minimiert werden und die Generierung von Ausgabedateien parallel verarbeitet werden kann.

Das klingt wie ein Plan. Aber ich kann nicht umgehen, wie man die tReplicate Ausgabe vom Elternjob zum Subjob übergibt. Und in ähnlicher Weise, wie die Ausgabe von Eltern auf dem Unterjob zu fangen, so dass es möglich wäre, mit tMap beizutreten?

Alle Ideen werden sehr geschätzt.

Vielen Dank !!!

Antwort

0

Das erste, was Sie nicht brauchen, tReplicate nach tMap, da die Replikation von Daten in tMap itsel getan werden kann, indem Sie gerade 2 oder 3 Flüsse von tMap haben.

Nun können Sie den Datenfluss nicht direkt an den Subjob übergeben. Also, was Sie hier tun können, ist - legen Sie die Daten in einige Dateien. -als tParalellize verwenden und 3 Subjob erstellen, die aus Dateien lesen und mit Sicht Abfrage verbinden. Verbinden Sie tParellize-Komponente mit allen drei Teiljobs und Sie sind fertig.

zweiter Ansatz, den Sie machen können, ist:

In Ihrem ersten Job, in tmap, schließt alle drei tOracleInput mit Blick Abfrage als Lookup und haben drei Ströme von tMap auf der Grundlage Ihrer Bedingung beizutreten.

Hope this helps ...

1

Wenn Sie nicht möchten, eine Datei zu schreiben, können Sie die tHashOutput Komponente verwenden, um das Ergebnis in dem Speicher gesetzt zu schreiben. Verwenden Sie dann einen tHashInput (verknüpfen Sie ihn mit dem tHashOutput), um das Ergebnis später im Job in einem anderen Teiljob zu lesen.

Sie müssten nicht einmal replizieren. Setzen Sie einfach die tmap-Ausgabe in einen tHashOutput und verwenden Sie dann 3 verschiedene Unterjobs, von denen jeder seinen eigenen tHashInput mit der tHashOutput-Komponente verknüpft hat.