質問

私はTalendを使用してデータウェアハウスを設定しています。私の仕事は、顧客データをディメンションテーブルに書き込み、ファクトテーブルにトランザクションデータを書き込むことです。ファクトテーブルのサロゲートキー(P_KEY)は自動インクリメントです。新しい顧客を挿入するとき、関連する顧客のIDを反映するために私のファクトテーブルが必要です。

私が言ったように、私のp_keyはauto auto_incrementingであるため、p_keyに任意の値を挿入することはできません。

寸法テーブルに行を挿入し、事実記録で参照する主要なキーを取得する方法についての考えはありますか?

より詳しい情報:

着信データが正規化されていない場合はどうなりますか?たとえば、次のデータを含むCSVがあります。

order #   date        total customer# first_name last_name
111       1/2/2010    500    101      John        Smith     
222       1/3/2010    600    101      John        Smith

明らかに、顧客情報をDimensionテーブルに表示し、Factテーブルにトランザクションデータを表示したいと思います。

dimension
101  john smith

fact
111       1/3/2010
222       1/3/2010

あなたが言ったように、ディメンションテーブルのキーは自動増加です。ファクトテーブルは、このキーを参照する必要があります。挿入後にサロゲートキーが返されるように、ETLジョブをどのように設計しますか?

また、顧客データが(上記のように)布告されている場合、キーをどのように処理しますか?

役に立ちましたか?

解決

しかし、私はあなたの問題を誤解しているかもしれませんが、:

  1. ファクトテーブルには、自動インクリメントPKがある場合とそうでない場合があります。通常、ファクトテーブルのPKは、次元テーブルを参照するいくつかのFKの複合です。

  2. ディメンションテーブルには、自動インクリメントPKが必要です。

  3. 新しい顧客は、トランザクションファクトがDW(または少なくともファクトテーブル)に到達する前に、顧客ディメンションテーブルに「着陸」する必要があります。

  4. ディメンションテーブルには、電子メール、フルネーム +ピンなどの顧客を独自に識別するBusinessKeyが必要です。

  5. 着信トランザクションの行には、顧客BusinessKeyフィールドも必要です。これが顧客の識別方法です。

  6. ビジネスキーを使用して、トランザクションをファクトテーブルに挿入する前に、顧客ディメンションテーブルから顧客プライマリキーを検索します。

編集

新しい顧客データがトランザクションにバンドルされている場合は、顧客データを抽出し、トランザクションの前にDWにルーティングする方法を見つけます。

アップデート:

最初にdimcustomerをロードし、businesskeyを決定します - 次の寸法は次のようになります。

CustomerKey = 12345 (auto-incremented)
CustomerBusinessKey = john_smith_101 (must uniquely identify the John Smith)
CustomerFirstName = John
CustomerLastName = Smith

寸法の読み込みプロセス中に、2つのストリーム、既存および新規顧客の入力行を分離する必要があります。 「既存の顧客」ストリームからの行は、DIMテーブル(タイプ1 SCD)を更新し、「新しい顧客」ストリームからの行が挿入されます。挿入されている行のストリームに重複はありません。これを、それらをステージングテーブルに挿入し、ディメンションテーブルに最終挿入する直前に複製を削除することで達成できます。また、複製を抽出し、それらをロードプロセスに戻して顧客レコードを更新することもできます。更新された電話番号などのように、新しいデータが含まれている場合があります。

顧客が入ったら、事実を読み込みます。

ファクトテーブルは次のように見えるはずです:

DateKey     (PK)
CustomerKey
OrderNumber (PK)
Total

DateKeyとOrderNumberのCompositeプライマリキーを使用して、注文番号シーケンスを時々リセットできるようにしました。

読み込みプロセス中に、ファクトレコードを変更して次のように見えます。

DateKey CustomerBusinessKey OrderNumber Total
20100201  john_smith_101       111       500
20100301  john_smith_101       222       600

この時点で、ルックアップを使用して、DimensionテーブルのCustomerBusinessKeyをDimension TableのcustomerKeyに置き換える必要があります。したがって、検索後、ストリームは次のようになります。

DateKey CustomerKey OrderNumber Total
20100201 12345       111         500
20100301 12345       222         600

これをファクトテーブルに挿入できます。

私も少しcheしました - 薄暗いから日付キーを検索せず、ファクトテーブルの既存の行を探しませんでした。ファクトテーブルを読み込むときは、ロードする前に既存の(dateKey、OrderNumer)組み合わせを探すことができます。または、再び複製を保護するためにプライマリキーに任せることができます。いずれにせよ、同じデータをFactテーブルに再ロードしようとする試みが失敗することを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top