2011-08-14 5 views
1

を含むデータウェアハウスのデータを照会Iは、時間ディメンションのための2つのテーブル時間ディメンション

日(日ごとに一意の行)
日の 時間(日中の毎分のためのユニークな行)

を有しますこのスキーマを考えると、最後のX時間(Xは0より大きい任意の数である可能性がある)のファクトを検索したい場合、クエリはどのように見えますか?

開始時間と終了時間が偶然になると、今年の2つの異なる日。

EDIT:私のファクトテーブルは

+2

どのようなrdbmsを使用していますか? –

+0

おそらく時間の列を作成する(ビュー、または "with"、またはサブクエリとの結合だけを使用して)、それを使用します。時間のコマンドは、あなたが使用しているデータベースが何であるかを知ることが重要です。 –

+0

現時点ではmysqlを使用していますが、近い将来にsqlserver、oracle、およびsqlliteで動作させる必要があります – WPFAbsoluteNewBie

答えて

2

ファクトテーブルは当日の境界上で起こる奇妙なことで、時間のクエリを避けるために持っていない(とが必要です)元のタイムスタンプタイム・スタンプ列を持っていません。奇妙なことは、WHERE句に複雑な日時関数があることを意味します。

ほとんどのDWでは、これらのタイプのクエリは非常にまれですが、DWにデータをストリーミングして同時にレポートに使用しているようです。

だから私はお勧めします:

  1. は、ファクトテーブルのフルタイムスタンプを紹介します。

  2. 古いレコードについては、日付と時刻キーからタイムスタンプを再作成してください。

DWクエリはすべてに約は、WHERE句で任意の機能を有する、または関数を使用する必要がある場合、それはSARGABLEであることを確認していません。

0

Start DateEnd Dateの列をTIMESTAMPに変換して入力する方がよいでしょう。

テーブルをスライスするには、適切なinterval BETWEEN Start Date AND End Dateが必要です。あなたが取得する必要がありますことを、あなたが持っている現在のスキーマを与えられたように私には思える

Start Date <= (SYSDATE - (4/24)) AND End Date >= (SYSDATE - (4/24)) 
0

:Oracleではintervalは、これも書き換えることができSYSDATE - (4/24)またはSYSDATE - NUMTODSINTERVAL(4, 'HOUR')

の線に沿って何かだろう時間ディメンション表から適切な時間IDを検索条件に一致させてから、ファクト表の一致する行を検索します。あなたの時間ディメンションの粒度に応じて、あなたはどちらか(SQL Serverの例を)やってのパフォーマンスをチェックすることをお勧めします:

  1. 副選択:TIMEID INは(SELECT FOO FROM

    SELECT X

    :HOUR> = DATEPART(HOUR、CURRENT_TIMESTAMP())DIMTIME AND DATEID INからのIDは

  2. インナーに参加(DATE = GETDATE()DIMDATEからIDを選択します)

    SELECT FOO INNER FROM XがDIMTIME ON TIMEID = DIMTIME.ID WHERE HOUR> = DATEPART(HOUR、CURRENT_TIMESTAMP())を内部結合がDATE = GETDATE()DIMDATE ON DATEID = DIMDATE.IDをJOIN

どちらでもありませんこれらは本当に魅力的な選択肢です。

「最後のX」分析ではなく、ロールアップ分析を目的としたキューブに対してクエリを実行している可能性がありますか?

「ロールアップ」キューブではない場合は、ファクトテーブルをより良いキーで再スタンプする必要があるという点で他のポスターに同意します。実際に頻繁に時間を検索するつもりならおそらくファクトテーブルにもその値を含めるべきです。他の試みはおそらくクエリを非サガブルにします(What makes a SQL statement sargable?参照)。 「スマート」

である必要があり、他のディメンション表、日付と時刻のディメンション・キーで使用される代理キーとは対照的に

マイクロソフトは、http://msdn.microsoft.com/en-us/library/aa902672%28v=sql.80%29.aspxことをお勧めします日付ディメンションに推奨されるキーは、 "yyyymmdd"の形式です。この形式は、ユーザーが覚えてクエリに組み込むのが簡単です。また、日付別に複数の表にパーティション化されたファクト表の推奨サロゲート・キー形式です。

最高の運を!

関連する問題