2016-04-07 15 views
1

Ich habe diese Art von Daten:Transponieren Daten mit Talend

enter image description here

Ich brauche diese Daten in so etwas wie dies mit Talend transponieren: würde

enter image description here

Hilfe sehr geschätzt .

+0

Hallo @ydaetskcoR, irgendwelche Vorschläge dafür? –

Antwort

2

Vorschlag des dbh sollte in der Tat arbeiten, aber ich habe es nicht ausprobiert.

Allerdings habe ich eine andere Lösung, die keine Änderung des Eingabeformats erfordert und nicht zu kompliziert zu implementieren ist. Tatsächlich hat der Job nur zwei Transformationskomponenten (tDenormalize und tMap).

Der Auftrag sieht wie folgt aus: enter image description here

Erklärung:

  • Ihre Eingabe aus einer CSV-Datei gelesen wird (könnte eine Datenbank oder jede andere Art von Eingabe sein)
  • Die tDenormalize-Komponente wird den Spaltenwert (Spalte 2) auf Grundlage des Werts für die ID-Spalte (Spalte 1) denormalisieren, indem Felder mit einem bestimmten Trennzeichen (";" in meinem Fall) getrennt werden, was in zwei Zeilen angezeigt wird.
  • tMap: Teilen Sie die aggregierte Spalte in mehrere Spalten auf, indem Sie die String.split() -Methode von java verwenden und das resultierende Array in mehrere Spalten verteilen. Die tMap sollte wie folgt erhalten: enter image description here

Da Talend Array-Objekte nicht akzeptiert zu speichern, müssen Sie den gespaltet String in Objekt-Format zu speichern. Dann werfen Sie dieses Objekt in Array auf der rechten Seite der Karte.

Dieser Ansatz sollte Ihnen das erwartete Ergebnis liefern.

WICHTIG:

  • tNormalize könnte die Reihen mischen, für größeren Eingang bedeutet, können Sie unsortierte Ausgabe begegnen. Stellen Sie sicher, dass Sie es bei Bedarf sortieren oder stattdessen tDenormalizeSortedRow verwenden.
  • tNormalize ähnelt einer Aggregationskomponente, dh es scannt die gesamte Eingabe vor der Verarbeitung, was zu möglichen Leistungsproblemen mit besonders großen Eingaben (Dutzende von Millionen von Datensätzen) führt.
  • Ihre Eingabe ist wahrscheinlich falsch (Sie haben 5 Einträge mit 1 als ID und 6 Einträge mit 2 als ID). Es werden 6 Spalten erwartet, was bedeutet, dass Sie immer 6 Zeilen pro ID haben sollten. Wenn nicht, dann sollten Sie die Lösung von dbh implementieren, und Sie müssen wahrscheinlich eine Spalte mit einem Schlüssel hinzufügen.
1

Sie können die tPivotToColumnsDelimited-Komponente von Talend verwenden, um dies zu erreichen. Sie werden höchstwahrscheinlich eine zusätzliche Spalte in Ihren Daten benötigen, um den Feldnamen darzustellen.

Like „Identifier, Feldname, Wert“

Dann können Sie diese Komponente verwenden, um die Daten zu schwenken und eine Datei als Ausgabe schreiben. Wenn Sie die Daten weiter verarbeiten müssen, lesen Sie die resultierende Datei mit tFileInoutDelimited.

Siehe docs und ein Beispiel an https://help.talend.com/display/TalendOpenStudioComponentsReferenceGuide521EN/13.43+tPivotToColumnsDelimited