8

SQL 2008/SSIS で最初のデータ ウェアハウスを構築しており、ファクト テーブルの読み込みに関するベスト プラクティスを探しています。

現在、私の DW には、タイプ 1 SCD のディメンション (オフィス、従業員、製品、顧客など) が約 20 あります。私の dw 構造には、既に適用したものがいくつかあります。

  • Null なし (ステージング中に、テキストの場合は空白に、数値の場合は 0 に置き換えられます)
  • 各次元に入力された不明な主要メンバー (SK ID 0)
  • ステージから実動テーブルへの SCD タイプ 1 ロードの UPSERT
  • ディメンションの読み込みに SELECT DISTINCT

私のファクト ロード SSIS プロジェクトでは、ディメンションをロードするための現在の方法は、各 DIM に対して複数のルックアップ (20 以上) を行い、FACT テーブルにデータを入力することです。

私が設定したルックアップのために:

  • フルキャッシュ
  • 「一致するエントリがありません」の失敗を無視する
  • 各 SK の "ISNULL(surrogate_idkey) ? 0 : surrogate_idkey" を使用した派生変換。ルックアップが失敗した場合、デフォルトで SK ID 0 (不明なメンバー) になります。
  • 一部のディメンション ルックアップには複数のビジネス キーがあります

これは最善のアプローチですか?上記の私の説明を助けるために添付された写真。

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

4

1 に答える 1

5

良さそう。パフォーマンスの問題が発生し始めた場合のオプションはありますが、これが安定している場合 (データの読み込み時間内に終了する、ソース システムのリソースが枯渇していないなど)、変更する理由はありません。

注意すべきいくつかの潜在的な問題...

  1. 20 以上のフル キャッシュ ルックアップ変換を使用すると、ディメンションのサイズが大きくなると問題が発生する可能性があります...SSIS システムのメモリの制約により...しかし、それらはタイプ 1 であるため、心配する必要はありません。
  2. フルキャッシュルックアップは実行前に「水和」します...それらが20以上あると速度が低下する可能性があります

(上記のものに対する) 一般的な代替手段は、ソース システムからファクト テーブル データを抽出し、単一の SQL ステートメントを介してディメンション キーのルックアップを実行する前に、ステージング エリアに配置することです。この目的のために、ステージング領域に一連のディメンション キー マッピング テーブルを保持するものさえあります。これにより、ソース システムでのロック/ブロックが軽減されます...ロードするたびに大量のデータがあり、データを吸い出して 20 以上のルックアップ変換を実行している間、ソース システムをブロックする必要がある場合。

大量のデータ、大きなディメンション、複雑なキー マッピング (通常は複数のソース システムが原因)、および短いデータ読み込み時間枠がある場合、適切なステージング エリア戦略を持つことがより重要になります。

于 2012-11-01T10:17:07.260 に答える