Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So erraten Sie Schemas in Mysqlinput on the fly in Talend

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.