Bedingte Zuordnung in Talend
Habe ich einen einfachen job in Talend, die ausgeführt wird, eine innere Verknüpfung der Daten zwischen 2 excel-sheets und dann dump die Ausgabe-excel-Tabelle. Dies kann am besten durch die folgenden Diagramm :-
Mapping verwendet in tMap ist :-
Aber die zusätzliche Herausforderung für mich ist jetzt, dass ich führen Sie diese Zuordnung nur, wenn der Wert der Spalte in dieser Zeile nicht NULL ist. zB gibt es ein mapping row1.RECID = row2.RECID, aber dies sollte nur dann legal sein, wenn row2.RECID nicht NULL ist.
Wie kann ich erreichen, das in Talend? Ich habe viel experimentiert mit tMap Ausdrücken, aber nicht bekommen kann es richtig..
Hier ist ein kleines Beispiel für die Eingabe und die entsprechenden erwarteten Ausgang.
Angenommen, mein input hat die Werte :-
v1, v2,v3,v4
1 , A, O, 3
2, B, X, 4
3, C, X, 4
- und lookup-Werte
v1, v2, v3
1, A, O, 3
2, null, X, 4
3, null, C 4
2,null,X,null
Dann die Ausgabe sollte sein :-
v1,v2,v3
1,A,O,3
2,B,X,4
2,B,X,4
- Sie sind mit den korrekten Einstellungen, die inner-join-Modell gibt Ihnen das nicht-null-Werte, wenn Sie etwas anderes bitte fügen Sie der aktuellen Ausgabe Probe und die gewünschte Ausgabe zu Ihrer Frage.
- Warum Sie nicht von filter-input-Zeilen, die einen null-Wert in v2-Spalte ? so tmap erhalten alle Zeilen der Eingabe und nur die erste Zeile der lookup-und gibt Ihnen die gewünschte Ausgabe.
- Ja, versucht, aber es wurde zu langweilig.. Ist es nicht eine elegantere Lösung zu diesem?
- Ich nicht verstehen, warum die Letzte Zeile angezeigt wird, können Sie bitte erklären, die letzten beiden Zeilen der Ausgabe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bevor er Ihren Eingang fließt, müssen Sie ablehnen Zeilen mit null-Werten, die ich erstellt habe, eine Zuordnung auf der Grundlage der gegebenen einfachen Daten.
row2.v1!=null and row2.v1!= "" and row2.v2!=null and row2.v1!=""
Sie schreiben kann jeder logische Ausdruck zum filtern Ihrer DatenVersuchen zum anzeigen der maximalen Werte von row1, die setzen row2 mit left outer join.
Ich Sie wollen Werte, die nur in row1 und row2, können Sie einen filter hinzufügen in der row2 für, dass (aber ich denke, dass das ist nicht, was Sie wollen)
Talend hat eine weitere elegante Möglichkeit, die Filterung Ihrer Daten auf mehrere Spalten. Verwenden Sie die tSchemaComplianceCheck Komponente, wo herausfiltern null-Werte und leere ist so einfach wie das klicken auf ein paar Kontrollkästchen. Auf diese Weise können Sie Ihr eigenes schema zur Prüfung gegen die null-Werte und leere Werte und auszufiltern. Die error Zeilen gehen an eine reject-flow haben Sie die Möglichkeit der Verarbeitung. Wenn Sie nicht wollen, zu erfassen und zu verarbeiten, die ablehnt, können Sie Sie einfach ignorieren. Ihre Haupt-flow wird nur die Datensätze, übergeben die compliance-Prüfung. Hier sind einige Tipps zur Verwendung:
In der tSchemaComplianceCheck Komponente -->Grundeinstellungen-Bildschirm klicken Sie auf Benutzerdefinierte und es wird Ihnen zeigen, jeder Spalte. Stellen Sie sicher, Nullable ist nicht aktiviert oder es wird die null-Werte zulassen, um pass-thru.
In der Registerkarte Erweiterte Einstellungen überprüfen Behandeln alle leeren string als NUll. Dies funktioniert in Verbindung mit der vorherigen Schritt, um die filter können sowohl die null und leer.
In Ihre Excel-Komponente, klicken Sie auf Fortschritte, die Registerkarte Einstellungen, und überprüfen Sie Aufhören zu Lesen, die auf die Begegnung mit leere Zeilen.
unten ist ein Bild, das zeigt den grundlegenden Ablauf und Einstellung. Sie würde link zu einer tMap statt der tLogRow. Wenn ich dein problem richtig verstanden ich denke, du wirst finden, dies ist die ideale Lösung bei Talend.