2017-07-04 3 views
1

ich Talend bin mit Datenbank-Feldnamen aus der Tabelle zu extrahieren und in eine CSV schreiben, nachdem sie mit „“ den „_“ in Feldnamen zu ersetzen. Ich möchte diese Werte gegen die tatsächlichen Header haben.Wie Felder dynamisch in eine CSV-Datei zu schreiben, eine tJava mit

zB:

|First_Name|Last_Name| 
|----------|---------| 
|First Name|Last Name| 

Meine Aufgabe ähnlich sieht folgende. enter image description here

-Code in tJavaRow ist wie folgt:

for (java.lang.reflect.Field field: 
input_row.getClass().getDeclaredFields()) { 
String fieldName = field.getName(); 
String newFieldName = null; 
newFieldName = fieldName.replaceAll("_", " "); 
context.columnName = newFieldName; 
System.out.println("Field name is " + context.columnName); 
    } 

Wie kann ich den Wert dieser Kontextvariable für jedes Feld in CSV-Datei erhalten? Wenn ich es direkt in der Tmap verwende, wird nur der Name des letzten Feldes als Wert verwendet. tmap hatte ich zwischen tJava und der tFileOutputDelimited. enter image description here

+0

Ist dies nur über den Austausch dynamisch Header? Wie sieht die 'tMap' aus? Was ist im Kontext gespeichert? – tobi6

+0

@ tobi6 context hat columnName – BlueStar

Antwort

0

Sie können nicht Schema ändern, da sie als deklarierten Variablen in Java-Code behandelt werden, die in Backend erzeugt wird.

Ihr Schema "| Vorname_Nachname |" wird wie folgt konvertiert:
String First_Name = null;
String Last_Name = null;
Sie können diese Schema-Spaltennamen nicht im laufenden Betrieb ändern.

Aber Sie können einen Datensatz aus den Spaltennamen erstellen, die Sie aus der Datenbank abrufen, indem Sie die Trennzeichen Sie wollen (lässt Komma nehmen)

for (java.lang.reflect.Field field : input_row.getClass().getDeclaredFields()) { 
    String fieldName = field.getName(); 
    context.columnName = context.columnName + "," + fieldName.replaceAll("_", " "); 
} 

Und jetzt, bevor Sie Ihre Daten das Schreiben in eine csv-Datei, schreibe diesen Header-Datensatz in context.columnName in diese CSV-Datei.
Nachdem Sie den Header-Datensatz geschrieben haben, hängen Sie Ihre Daten an diese Datei an, indem Sie das Kontrollkästchen "Anhängen" in tFileOutputDelimitted aktivieren.

+0

Ich bin nicht sicher, wie ich in einen context.columnName zu einem csv direkt von tJavaRow schreiben kann, da der context.columnName -Wert dynamisch ist. – BlueStar

Verwandte Themen