1

データを取得する際のクエリと同様に、動的データソースから destinationDB にデータを挿入しようとしています。ただし、挿入する列とテーブルは異なる場合があります。ただし、列とテーブルは、destinationDB のテーブルに行として保存されます。つまり、動的ではありますが、挿入する場所とその列はすでにわかっています。それで、ええ、それは私の問題の裏話です。

とにかく、問題は挿入側にあります。データを操作してクエリを取得することにより、データソースを取得するための SELECT ステートメントを生成し、データを取得することができました。

これが今の姿です。変数を取得することに注意してください。これが、SQLクエリを生成する方法です。

これが今の姿です。変数を取得することに注意してください。これが、SQLクエリを生成する方法です。 ここに画像の説明を入力

テーブル入力の内部は次のようになります。 ここに画像の説明を入力

実行 SQL ステートメントは次のとおりです。 ここに画像の説明を入力

動的部分を参照してください。とにかく、問題は、挿入スクリプト変数の ${INSERT_VALUES} がすべて「?」であることです。テーブル入力によってデータが提供されると想定される文字。列の数を特定するために。

問題 1: 「SQL ステートメントの実行」ステップでわかるように、「?」を提供するためのパラメーターを渡していません。インサートに。これは、パラメーター/列が毎回異なるため、そこに何をタグ付けすればよいかわからないためです。挿入するテーブルによって異なります。これにアプローチする方法はありますか?問題 2: ペンタホは二重置換のようなものを許しますか? 変数をその値に置き換え、「?」を置き換えます。パラメータ値に?

4

1 に答える 1

0

私があなたの問題を正しく理解していれば、実行するたびに特定の列を選択していて、たとえばcolA、特定のテーブルから、次のような行tableXに挿入したいと思うでしょう:tableY

tableX, colA, valueA

あれですか?

その場合、いくつかの注意事項があります。

1) テーブル入力ステップで変数の取得ステップの出力を実際に使用していない。テーブル入力では、Get Variables ステップの出力であるフィールドではなく、変数値を読み取っています。

2) ここでは、行 SQL スクリプトの実行ステップを使用しないでください。テーブル出力ステップは、より適切なオプションです。

より良いレシピは次のとおりです。

1) 変数の取得: 次の変数を取得し、次の出力フィールドを作成する必要があります。 ${SQL_STR} は sql_str にマップされます ${SELECT_COLUMN} は select_column にマップされます

2) テーブル入力: クエリは次のようになります。

Select
  ? as table,
  ? as column,
  ${SELECT_COLUMN} as value
From (
  ${SQL_STR}
) foo

テーブル入力ステップの出力は、次の 3 つのフィールドで構成されます。

${SQL_STR} の文字列値、${SELECT_COLUMN} の文字列値、およびソース テーブルから得られる実際の値。

3) テーブル出力ステップは、次のフィールド マッピングを使用して、テーブル ${DATA_TABLE_SQL} に書き込みます。

table -> dp_table_relation_id 列 -> ターゲット テーブルにある列名値の列名 -> ターゲット テーブルにある値の列名。

注: ID は含めませんでしたが、ターゲット テーブルの auto_increment フィールドとして設定するか、別のクエリで、ターゲット テーブルに既に格納されている最大値を取得し、シーケンスを追加することは難しくありません。テーブル入力ステップの出力にこれら 2 つの整数を追加し、結果を新しい ID として使用します。

于 2015-04-21T09:23:12.830 に答える