Talendのサブスクリプションバージョンを使用している場合は、動的列タイプを使用できます。タイプ「動的」の入力に対して単一の列を定義し、それを出力コンポーネントの同じタイプの列にマップすることができます。これにより、テーブルaから列が動的に取得され、テーブルbの同じ列にマップされます。これが
Talend Open Studioを使用している場合、Talendは設計時に定義する必要のある入力コンポーネントと出力コンポーネントの列のリストを想定しているため、状況は少し複雑になります。
これが、この制限を回避するために私がまとめた解決策です。
アイデアは、テーブルbに存在するすべてのテーブルaの列を一覧表示することです。次に、それをコンマで区切られた列のリストに変換します。私の例では、id,Theme,name そしてそれをグローバル変数COLUMN_LISTに保存します 。 tMapの2番目の出力は同じ列のリストを作成しますが、今回は列の間に一重引用符を入れます(CONCATのパラメーターとして使用できるようにするため) 後で機能します)、次のように最初と最後に一重引用符を追加します:"'", id,"','",Theme,"','",name,"'" そしてそれをグローバル変数CONCAT_LISTに保存します 。
次のサブジョブで、table aをクエリします CONCATを使用する 関数、連結する列のリストを提供しますCONCAT_LIST 、したがって、'value1', 'value2',..etcのように単一の列で各レコードを取得します
そしてついにINSERTを実行します table bに対するクエリ 、グローバル変数COLUMN_LISTで指定された列のリストを指定する 、およびCONCATの結果として単一の文字列として挿入される値 関数(row6.values 。
このソリューションは一般的なものであり、テーブル名をコンテキスト変数に置き換えると、それを使用して任意のMySQLテーブルから別のテーブルにデータをコピーできます。