Talend: Datei basierend auf dem Inhalt einer Spalte splitten
Heute möchte ich Dir gerne einen Anwendungsfall vorstellen, den ich mit dem Talend Open Studio lösen konnte. Talend Open Studio ist ein Open Source ETL-Tool, mit dem sich allerlei Aufgaben des Datenmanagements lösen lassen. Es handelt sich dabei um einen Code-Generator, mit dessen Hilfe die Datenverarbeitung und -integration auf visuelle Art und Weise automatisiert werden kann.
In dem beschriebenen Anwendungsfall habe ich eine Liste von Accounts. In einer Spalte dieser Liste steht der passende Ansprechpartner, der sich um den jeweiligen Account kümmert. Aus dieser Liste möchte ich mehrere Dateien erstellen, die für jeden Ansprechpartner eine Liste seiner oder ihrer Accounts beinhaltet.
Hier ein Ausschnitt meiner CSV-Datei, die ich hierzu als Quelldatei nutze:
Einlesen der Metadaten
Das Einlesen der Metadaten bereitet in Talend Open Studio keine Probleme. Ich wähle die CSV-Datei, gebe dort „Comma“ als Trennzeichen an und sage, dass in der ersten Zeile die Spaltenüberschrift steht.
Job erstellen
Für den passenden Talend-Job benötigen wir die Komponenten
- tFileInputDelimited mit dem Verweis zur und des Schemas der Quelldatei
- tFlowToIterate um eine zeilenweise Verarbeitung zu ermöglichen
- tFixedFlowInput um die Werte der einzelnen Spalte zu nutzen
- tFileOutputExcel um die jeweiligen Dateien pro Ansprechpartner zu schreiben
Die Quellatei können wir aus den Metadaten hinzufügen und über die Main-Row mit der tFlowToIterate-Komponente verbinden. Dort wählen wir die Option „Verwende den Standard (Schlüssel, Wert) in globalen Variablen“ ab und fügen anstelle dessen unser aktuelles Schema ein. Es hat sich hier bewährt als Wert den Variablennamen mit einem vorgestellten Unterstrich zu nutzen.
Die Komponente tFlowToIterate liest die Daten nun Zeile für Zeile ein und schreibt den aktuellen Wert in eine globale Variable.
Innerhalb der tFixedFlowInput-Komponente lesen wir diese Werte wieder ein. Dazu kopieren wir uns das Schema aus der tFileInputDelimited-Komponente und fügen es hier ein.
Danach können wir im Modus „Use Single Table“ wieder jede einzelne Spalte mit dem Wert der globalen Variable füllen. Um auf eine globale Variable zuzugreifen, muss man ein klein wenig Java-Code verwenden. Das ist aber nicht schwierig und lässt sich relativ leicht merken. Für Strings nutzen wir „(String)globalMap.get(„<Variablen-Name>“)“ und für z. B. Integer dann eben „(Integer)globalMap.get(„<Variablen-Name>“)“. Entsprechend sieht unsere Komponente dann so aus:
Als letztes kommt nun die Komponente, die die Daten in eine Excel-Datei schreiben soll. Excel ist hier natürlich lediglich ein Beispiel und es können auch alle anderen Arten von Dateien (CSV, XML, etc.) geschrieben werden.
Innerhalb der Komponente legen wir den Pfad fest, in der die Dateien geschrieben werden sollen. Als Name der Datei nutzen wir die globale Variable des entsprechenden Ansprechpartners.
Zusätzlich aktivieren wir die Optionen „Schreibe als Excel 2007 Dateiformat (xlsx)“, „Include header“, „Existierende Datei anhängen“ und „Existierendes Blatt anhängen“.
Nachdem der Job gestartet wurde, werden die entsprechenden Dateien geschrieben und wir erhalten im ausgewählten Verzeichnis je eine Excel-Datei für jeden Ansprechpartner.
In dieser Excel-Tabelle findet somit jeder Ansprechpartner die ihm zugeordneten Kontakte.
Downloads
Der fertige Job kann hier heruntergeladen werden. Die Beispieldatei, welche ich für den Job verwendet habe, kann hier heruntergeladen werden.
Viel Spaß beim Ausprobieren!