Wenn Sie eine Abonnementversion von Talend verwenden, können Sie den dynamischen Spaltentyp verwenden. Sie können eine einzelne Spalte für Ihre Eingabe vom Typ "Dynamisch" definieren und sie einer Spalte desselben Typs in Ihrer Ausgabekomponente zuordnen. Dadurch werden Spalten aus Tabelle a dynamisch abgerufen und denselben Spalten in Tabelle b zugeordnet. Hier ist ein Beispiel
.
Wenn Sie Talend Open Studio verwenden, werden die Dinge etwas kniffliger, da Talend eine Liste von Spalten für die Eingabe- und Ausgabekomponenten erwartet, die zur Designzeit definiert werden müssen.
Hier ist eine Lösung, die ich zusammengestellt habe, um diese Einschränkung zu umgehen.
Die Idee ist, alle Spalten von Tabelle a aufzulisten, die in Tabelle b vorhanden sind. Konvertieren Sie es dann in eine durch Kommas getrennte Liste von Spalten, in meinem Beispiel id,Theme,name
und in einer globalen Variable COLUMN_LIST
speichern . Eine zweite Ausgabe der tMap erstellt die gleiche Liste von Spalten, setzt aber diesmal einfache Anführungszeichen zwischen Spalten (damit sie als Parameter für CONCAT
verwendet werden können Funktion später), fügen Sie dann einfache Anführungszeichen am Anfang und am Ende hinzu, etwa so:"'", id,"','",Theme,"','",name,"'"
und in einer globalen Variable CONCAT_LIST
speichern .
Beim nächsten Subjob frage ich table a
ab mit dem CONCAT
-Funktion und gibt ihr die Liste der zu verkettenden Spalten CONCAT_LIST
, wodurch jeder Datensatz in einer einzelnen Spalte wie so 'value1', 'value2',..etc
abgerufen wird
Dann führe ich endlich ein INSERT
aus Abfrage gegen table b
, indem die Liste der Spalten angegeben wird, die durch die globale Variable COLUMN_LIST
angegeben wird , und die einzufügenden Werte als einzelner String resultierend aus dem CONCAT
Funktion (row6.values
).
Diese Lösung ist generisch, wenn Sie Ihre Tabellennamen durch Kontextvariablen ersetzen, können Sie damit Daten aus jeder MySQL-Tabelle in eine andere Tabelle kopieren.