Hvis du bruger en abonnementsversion af Talend, kan du bruge den dynamiske kolonnetype. Du kan definere en enkelt kolonne for dit input af typen "Dynamisk" og tilknytte den til en kolonne af samme type i din output-komponent. Dette vil dynamisk hente kolonner fra tabel a og knytte dem til de samme kolonner i tabel b. Her er et eksempel
.
Hvis du bruger Talend Open Studio, bliver tingene lidt vanskeligere, da Talend forventer en liste over kolonner for input- og outputkomponenterne, der skal defineres på designtidspunktet.
Her er en løsning, jeg har sammensat for at omgå denne begrænsning.
Ideen er at liste alle tabel a's kolonner, der er til stede i tabel b. Konverter det derefter til en kommasepareret liste over kolonner, i mit eksempel id,Theme,name
og gem den i en global variabel COLUMN_LIST
. Et andet output fra tMap bygger den samme liste af kolonner, men denne gang sætter enkelte anførselstegn mellem kolonner (så de kan bruges som parametre til CONCAT
funktion senere), og tilføj derefter enkelte anførselstegn til begyndelsen og slutningen, som sådan:"'", id,"','",Theme,"','",name,"'"
og gem den i en global variabel CONCAT_LIST
.
På det næste underjob spørger jeg table a
ved hjælp af CONCAT
funktion, hvilket giver den listen over kolonner, der skal sammenkædes CONCAT_LIST
, og dermed henter hver post i en enkelt kolonne som f.eks. 'value1', 'value2',..etc
Så udfører jeg endelig en INSERT
forespørgsel mod table b
, ved at angive listen over kolonner givet af den globale variabel COLUMN_LIST
, og de værdier, der skal indsættes som en enkelt streng, der er et resultat af CONCAT
funktion (row6.values
).
Denne løsning er generisk, hvis du erstatter dine tabelnavne med kontekstvariabler, kan du bruge den til at kopiere data fra enhver MySQL-tabel til en anden tabel.