典型的な Kimball スター スキーマ データ ウェアハウス - モデル ビューは実現可能ですか?および Gen をコード化する方法
-
02-07-2019 - |
質問
私は典型的なスター スキーマを含むデータ ウェアハウスと、次のようなことを行うコードの束を持っています (明らかにはるかに大きいですが、これは例示です)。
SELECT cdim.x
,SUM(fact.y) AS y
,dim.z
FROM fact
INNER JOIN conformed_dim AS cdim
ON cdim.cdim_dim_id = fact.cdim_dim_id
INNER JOIN nonconformed_dim AS dim
ON dim.ncdim_dim_id = fact.ncdim_dim_id
INNER JOIN date_dim AS ddim
ON ddim.date_id = fact.date_id
WHERE fact.date_id = @date_id
GROUP BY cdim.x
,dim.z
ビューに置き換えることを考えています(MODEL_SYSTEM_1
, 、言う)、次のようになります。
SELECT m.x
,SUM(m.y) AS y
,m.z
FROM MODEL_SYSTEM_1 AS m
WHERE m.date_id = @date_id
GROUP BY m.x
,m.z
しかし、その景色は MODEL_SYSTEM_1
一意の列名を含める必要があります。また、これを実行した場合のオプティマイザのパフォーマンスも心配です。なぜなら、さまざまなファクトとディメンションにわたる WHERE 句内のすべての項目が最適化されるのではないかと心配だからです。ビューは星全体にわたることになり、ビューをパラメータ化することはできません (おい、それはクールだと思わないか!)
それで、私の質問は次のとおりです -
このアプローチは大丈夫ですか? それとも、パフォーマンスに悪影響を及ぼし、より優れた構文以外何も提供しない抽象化になるだけですか?
適切な PK と FK がすべて配置されている場合、重複する列名を排除して (後でビューを手動で調整する必要がある場合でも)、これらのビューをコード生成する最善の方法は何でしょうか?SQLを書いてそれを取り出すだけでよいでしょうか?
INFORMATION_SCHEMA
それともすでに利用可能な良い例があるのでしょうか。
編集: 私はそれをテストしましたが、より大きなプロセス、つまりそれぞれがこれらのビューを使用する複数のスターを結合した場合でも、パフォーマンスは同じようです。
自動化の主な理由は、データ ウェアハウスにこれらのスターが多数存在し、FK/PK が設計者によって適切に実行されているためですが、すべてのテーブルやドキュメントを精査する必要はありません。ビューを生成するスクリプトを書きました (テーブルの略語も生成します)。 INFORMATION_SCHEMA
, その後、ビューの作成をコミットする前に調整できます。
コードが欲しい人がいたら、ここで公開できると思います。
解決
私はこの手法を、私が管理しているいくつかのデータ ウェアハウスで使用してきました。テーブル直接アプローチと比較してビューに基づいてレポートを実行するときにパフォーマンスの低下に気づいたことはありませんが、詳細な分析を実行したことはありません。
SQL Server Management Studio のデザイナーを使用してビューを作成し、自動化されたアプローチは使用しませんでした。いずれにせよ、スキーマが自動化する価値があるほど頻繁に変更されるとは想像できません。最初にすべてのテーブルをビューにドラッグするのと同じくらい、結果の調整に時間がかかる可能性があります。
曖昧さを取り除くための良い方法は、列名の前にその列が属するディメンションの名前を付けることです。これは、レポート作成者やアドホック クエリを実行する人にとって役立ちます。
他のヒント
ビューを 1 つ以上のサマリー ファクト テーブルに作成し、実体化します。これらは、メインのファクト テーブルが更新されるときにのみ更新する必要があります。マテリアライズド ビューはクエリが高速になるため、サマリーで満たせるクエリが多数ある場合に有利になる可能性があります。
これらのサマリーが多数ある場合、またはそれらを頻繁に変更したい場合は、データ ディクショナリまたは情報スキーマ ビューを使用して SQL を生成し、テーブルを作成できます。
ただし、これらを頻繁に変更する可能性は低いため、ビュー定義を自動生成するのはそれほど手間がかからないと思います。
MS SQL Server を使用している場合は、それに近いインライン UDF を試すことができます。 パラメータ化されたビュー なるがままに。