0

ディメンション テーブルを検索してファクト テーブルに入力する必要がある8 つの代理キーがあります。ディメンション テーブルへの8 つのルックアップを作成し、マージ結合コンポーネントと並べ替えコンポーネントを使用して、データを 1 つの結果セットにマージし、ディメンションテーブルに挿入します。私の心配は、挿入を行う前に多くのマージとソートが行われ、パフォーマンスが良くないことです。上記で説明したことを達成するための最良の方法は何ですか?

4

2 に答える 2

2

もう 1 つの方法は、ELT (Extract Load Transform) アプローチを採用することです。データをステージング テーブルにロードし、単一の UPDATE ステートメントを実行してサロゲート キーをバッチで適用してから、ファクト テーブルにロードします。これはおそらく高速になり、列が変更された場合に UI でクリックしていじる SSIS メタデータのビットが少なくなります。

つまり、不明 (-1) を含む 3 次元の自明な例

  1. SSIS 経由でステージングにデータをロードする
  2. SSIS経由でこれを実行します

    UPDATE StagingTable SET SK1 = ISNULL(Dimension1.SK,-1), SK2 = ISNULL(Dimension2.SK,-1), SK3 = ISNULL(Dimension3.SK,-1) FROM StagingTable LEFT OUTER JOIN Dimension1 ON Dimension1.SRCKey = StagingTable .SRCKey LEFT OUTER JOIN Dimension2 ON Dimension2.SRCKey = StagingTable.SRCKey LEFT OUTER JOIN Dimension3 ON Dimension3.SRCKey = StagingTable.SRCKey

  3. これを SSIS 経由で実行するか、データ フローを使用します

    INSERT INTO factTable (SK1、SK2、SK3、Fact) SELECT SK1、SK2、SK3、Fact FROM StagingTable

これには少し手作業のコーディングがありますが、SSIS ユーザー インターフェイスをクリックしていじったり、ルックアップ コンポーネントのパフォーマンスを我慢したりするよりも、個人的にはこれを好みます。

于 2013-10-10T00:48:28.927 に答える
0

ソートとマージに注意することをお勧めします。代わりに、actualLookup Componentを使用してファクト値を実際のキーに変換してみませんか。基本的に、ルックアップ マージ ソース用に既に持っているクエリを取得し、それらをルックアップ コンポーネントに挿入します。一致または代理キーを返すために必要な列のみを含めます。

以下の判読不能な画像では、毎日の人数ファクト テーブルをロードするパッケージを確認できます。最悪のシナリオでは合計 10 回のルックアップがありますが、ソートまたはマージ操作が実行されていないことがわかります。4,100 万行が、2 行から 100 万行弱のルックアップにヒットします。ルックアップは、既存の行に追加の列を追加します。これは、並べ替えやマージ結合のパフォーマンスへの悪影響なしで、希望を表明したのと同じ機能であると私は信じています。

ここに画像の説明を入力

于 2013-10-09T21:07:34.803 に答える