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テーブルから別のテーブルにデータをコピーできます。