1

Informatica PowerCenter Designer 8.1.1 に取り組んでいます

3 つの列を持つソース テーブルがあります。

PORT_ID
ISSUE_ID
MKT_VAL

ソース テーブルのデータを、別のデータベースにある同じ 3 つのテーブルを含むターゲット テーブルに同期する必要があります。

PORT_IDISSUE_IDの間には 1:n の関係があります

このデータ同期を実行している間、DELETE に続いて INSERT を実行する必要があります。これは、PORT_ID にマップされた ISSUE_ID の数が変更される可能性があるためです。最初に、データがソースとターゲットで次のようになったとしましょう:

PORT_ID    ISSUE_ID
1          A
1          B
1          C

ソースのデータは次のように変更されます。

PORT_ID    ISSUE_ID
1          A
1          B
1          D

このため、同期中に、最初に PORT_ID = 1 にマップされたすべての行を削除してから、着信レコードを挿入する必要があります。

マッピング デザイナーでこれを行う方法がわかりません。誰かが私にいくつかの入力を与えることができますか?

4

4 に答える 4

1

これを行う最も一般的な方法は、事前クエリを使用することです。port_idとissue_idがテーブル内で一意である場合は、...を使用できます。

delete from tgt_table
where (port_id, issue_id)
  not in (select port_id, issue_id
            from src_table
         );
commit;

2番目の方法:

これらの2つの列をマッピングのキーとして追加できる場合は、ターゲット行を「挿入、更新、削除」(3つすべて)として「チェック」して、ターゲットデータがソースデータと同じであることを確認できます。ただし、ほとんどの場合、ビジネスルールはこれよりも複雑であるため、この機能が使用されることはめったにありません。

もう1つの一般的な実装は、ターゲットテーブルのルックアップに基づいて「削除する行にマークを付ける」ことです。

   Source -> Lookup (target_table) -> 
   exp (flag to see if the value exists) -> 
   mark for delete ->
   Delete using update_strategy_transformation
于 2012-08-22T13:39:08.903 に答える
0

ソース テーブルで動的ルックアップを作成できます。

動的ルックアップを作成するためにできること

-> 検索プロパティに移動し、

-> 動的ルックアップ キャッシュ ボックスにチェックを入れます

-> 次に、insert else update ボックスをチェックします。

これを行うとすぐに、新しいポート NewLookupRow がポート タブに表示されます。このポートを使用して、次の対応する値でレコードが挿入または更新されているかどうかを確認できます

0 は変更なし

1は挿入です

2は更新です

これで、それに応じてターゲットを更新できます。

お役に立てれば..

乾杯。

于 2016-03-17T09:19:53.607 に答える
0

次のことを行う単純なストアド プロシージャを記述します。

1) ステートメントを削除 (Rajesh 提供) (delete from tgt_table where (port_id, issue_id) not in (select port_id, issue_id from src_table ); commit; )

2) ステートメントの挿入

Insert into tgt_table where not in src_table
 commit;

3) マッピングのソースとターゲットとしてダミーを使用し、STORED_PROCEDURE_TRANSFORMATION を使用してストアド プロシージャを呼び出します。

于 2012-08-29T17:18:35.303 に答える
0

要件はソースに重複がないため、ここでは動的ルックアップは必要ないと思います..

定期的な検索を行い、削除と挿入の代わりに更新戦略を使用してレコードを更新してみませんか?

于 2016-07-30T01:41:42.717 に答える