sql >> データベース >  >> RDS >> Mysql

TalendでMysqlinputのスキーマをオンザフライで推測する方法

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




    1. 表の印刷がページサイズに適合しない

    2. MySQLテーブルにインデックスを作成するためのベストプラクティス–ローリングインデックスビルド

    3. mysql2gemを使用してアプリをインストールしようとしたときにエラーが発生しました

    4. C#をOracleに接続する