Jeśli korzystasz z subskrypcji Talend, możesz użyć dynamicznego typu kolumny. Możesz zdefiniować pojedynczą kolumnę dla danych wejściowych typu „Dynamiczny” i odwzorować ją na kolumnę tego samego typu w komponencie wyjściowym. Spowoduje to dynamiczne pobranie kolumn z tabeli a i zamapowanie ich na te same kolumny w tabeli b. Oto przykład
.
Jeśli używasz Talend Open Studio, sprawy stają się nieco trudniejsze, ponieważ Talend oczekuje listy kolumn dla komponentów wejściowych i wyjściowych, które muszą być zdefiniowane w czasie projektowania.
Oto rozwiązanie, które opracowałem, aby obejść to ograniczenie.
Chodzi o to, aby wymienić wszystkie kolumny tabeli a, które występują w tabeli b. Następnie przekonwertuj go na listę kolumn oddzielonych przecinkami, w moim przykładzie id,Theme,name
i przechowuj go w zmiennej globalnej COLUMN_LIST
. Drugie wyjście tMap tworzy tę samą listę kolumn, ale tym razem umieszczając pojedyncze cudzysłowy między kolumnami (tak, aby mogły być użyte jako parametry do CONCAT
funkcji później), a następnie dodaj pojedyncze cudzysłowy na początku i na końcu, na przykład:"'", id,"','",Theme,"','",name,"'"
i zapisz go w zmiennej globalnej CONCAT_LIST
.
W następnym podzadaniu wysyłam zapytanie do table a
za pomocą CONCAT
funkcja, podając listę kolumn do połączenia CONCAT_LIST
, pobierając w ten sposób każdy rekord w pojedynczej kolumnie, np. 'value1', 'value2',..etc
Następnie w końcu wykonuję INSERT
zapytanie do table b
, określając listę kolumn podaną przez zmienną globalną COLUMN_LIST
i wartości, które mają być wstawione jako pojedynczy ciąg, wynikający z CONCAT
funkcja (row6.values
).
To rozwiązanie jest ogólne, jeśli zastąpisz nazwy tabel zmiennymi kontekstowymi, możesz go użyć do skopiowania danych z dowolnej tabeli MySQL do innej tabeli.