4

私の ETL プロセスでは、変更データ キャプチャ (CDC) を使用して、最後の抽出以降にソース テーブルで変更された行のみを検出しています。次に、この行に対してのみ変換を行います。問題は、たとえば、1 つのディメンションに結合したい 2 つのテーブルがあり、そのうちの 1 つだけが変更された場合です。たとえば、次のような国と町のテーブルがあります。

国:

ID Name
1  France

町:

ID Name  Country_ID
1  Lyon  1

ここで、Towns テーブルに新しい行が追加されたとします。

ID Name  Country_ID
1  Lyon  1
2  Paris 2

Countries テーブルは変更されていないため、これらのテーブルの CDC には、Towns テーブルの行のみが表示されます。問題は、Countries と Towns の間で結合を行うと、Countries 変更セットに行がないため、結合によって空のセットが生じることです。

それを解決する方法はありますか?もちろん、3 つ以上のテーブルと結果結合を含む、より困難なケースがあるかもしれません。

4

2 に答える 2

2

これは、リアルタイムの変更データ キャプチャ、または増分のみの毎日の変更を行う場合に見られる典型的な問題です。

これを解決するには複数の方法があります。

1 つの方法は、関連付けられた国を取得するために、ディメンションまたはマッピング テーブルの自然キーで結合を行うことです (country_id = X の dim_table から、個別の国名、[..その他の属性..] を選択します)。

もう 1 つの方法は、変更キャプチャ プロセスの一部として結合を実行することです。行が町にロードされると、外部キー値を関連するステージング テーブル (国など) にロードするトリガーがオフになります。

于 2013-01-20T19:17:33.773 に答える
0

詳細については、私が口論できる割り当てがありますが、私はあなたの質問にあるものに固有のものになります. 結果を得るには、次のことをお勧めします...

1st Pass is where everything matches via the join... 
Union All 
2nd Pass Gets all towns where there isn't a country
(left outer join with a where condition that 
requires the ID in the countries table to be null/missing).

その不一致の結合の国 ID 値を、「不一致の値」として指定されたものにデフォルト設定します。通常、0 または -1 が使用されるか、後で説明を割り当てることができる一連の標準の負の数値を使用して、データがあなたにとって悪い理由を特定します。例 -1 は「国のない町を見つけた」のようになります。

于 2013-01-17T22:52:00.283 に答える