ディメンション テーブルを検索してファクト テーブルに入力する必要がある8 つの代理キーがあります。ディメンション テーブルへの8 つのルックアップを作成し、マージ結合コンポーネントと並べ替えコンポーネントを使用して、データを 1 つの結果セットにマージし、ディメンションテーブルに挿入します。私の心配は、挿入を行う前に多くのマージとソートが行われ、パフォーマンスが良くないことです。上記で説明したことを達成するための最良の方法は何ですか?
2 に答える
もう 1 つの方法は、ELT (Extract Load Transform) アプローチを採用することです。データをステージング テーブルにロードし、単一の UPDATE ステートメントを実行してサロゲート キーをバッチで適用してから、ファクト テーブルにロードします。これはおそらく高速になり、列が変更された場合に UI でクリックしていじる SSIS メタデータのビットが少なくなります。
つまり、不明 (-1) を含む 3 次元の自明な例
- SSIS 経由でステージングにデータをロードする
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
これを SSIS 経由で実行するか、データ フローを使用します
INSERT INTO factTable (SK1、SK2、SK3、Fact) SELECT SK1、SK2、SK3、Fact FROM StagingTable
これには少し手作業のコーディングがありますが、SSIS ユーザー インターフェイスをクリックしていじったり、ルックアップ コンポーネントのパフォーマンスを我慢したりするよりも、個人的にはこれを好みます。
ソートとマージに注意することをお勧めします。代わりに、actualLookup Component
を使用してファクト値を実際のキーに変換してみませんか。基本的に、ルックアップ マージ ソース用に既に持っているクエリを取得し、それらをルックアップ コンポーネントに挿入します。一致または代理キーを返すために必要な列のみを含めます。
以下の判読不能な画像では、毎日の人数ファクト テーブルをロードするパッケージを確認できます。最悪のシナリオでは合計 10 回のルックアップがありますが、ソートまたはマージ操作が実行されていないことがわかります。4,100 万行が、2 行から 100 万行弱のルックアップにヒットします。ルックアップは、既存の行に追加の列を追加します。これは、並べ替えやマージ結合のパフォーマンスへの悪影響なしで、希望を表明したのと同じ機能であると私は信じています。