2016-07-07 4 views
0

私はしばらくこのことを理解しようとしており、達成方法についての助けが必要でした。私はSQL Server(ソースdb)からユーザーを取り込み、mysql(ターゲットdb)に追加するinformaticaでETLプロセスを作成しました プロセスにはいくつかのステップがあります。1つのフィールドが変更されたときにレコードを更新する自動プロセスを作成する方法

手順1. - source.dbo。[user](SQL SERVER)をターゲットに移動します。無効の状態が変更されたときに、新しいレコードが

ステップ2を添加したときuser ユーザテーブルには、この

userid username profile disabled 
1  A   A   0 
2  B   A   0 
3  c   B   1 

このテーブルはアップサートされるようになります - 新規ユーザーをターゲットに挿入されています。ワーカーテーブル。左が参加するだけで作業員テーブルに存在してはいけないユーザーを追加するために が使用されます。

select wrk.*, usr.* from target.worker 
wrk left join target.user usr on wrk.userid=usr.userid 
where wrk.usrid is null; 

作業員テーブルには、その後のプロセスの後、この

id username userid disabled 
1 A   1  0 
2 B   A  0 

のようになりますが、ユーザーID 3がされる実行されます作業台に追加されました

ここでは私が理解できない部分があります: 無効状態が変わったときに作業員テーブルのユーザーを更新する必要があります。 現在、私は左の結合でユーザーからのワーカーを追加する設定をマップして、現在のワーカーテーブルに存在しないユーザーのみを追加しました。 対応するユーザーテーブルで無効なステータスが変更された場合、ワーカーテーブルのレコードを更新するようにマップする方法を教えてください。

私はこれが意味をなされることを望みます。 。 は、それを簡単にするために:私はそのようにフィルタや説明のプロセスとの結合問合せを必要とする

ターゲットは、[ユーザー]がある

userid username profile disabled 
1  A   A   0 
2  B   A   0 
3  c   B   1 
4  D   C   0 

とtarget.workerは

userid username profile disabled 
1  A   A   0 
2  B   A   0 
3  c   B   0 

です作業者テーブルは新しいレコードを挿入し、既存のレコードを無効にしますステータス:これは次のようになります

userid username profile disabled 
    1  A   A   0 
    2  B   A   0 
    3  c   B   1 <--- Record updated 
    4  D   C   0 <-- New record added 
+0

難しい点は何ですか? – Drew

答えて

1

target.workerのLookupを使用して、レコードがすでに存在するかどうかを確認します。 NewLookupRowが2(更新)になる場合は、Update TransformationでDD_UPDATEを使用します。 1の場合は、DD_INSERTを使用します。 Update Transの前にNewLookupRow!= 0 Filterを使用して、すでにターゲットになっている行をスキップします。

+0

ありがとう、私はかなりinformaticaクラウドで検索ツールを使用する方法を理解できませんでした。しかし、代わりに私は結合されたテーブルの更新レコード –

+0

のために別のフィルタを作成しました。それはInformatica Cloudに関するものではありませんでした。ジョイナーも同様に行く方法です。 – Maciejg

関連する問題