sql >> データベース >  >> RDS >> Database

SCDタイプ4

    ゆっくりまたは予測できないほど変化するディメンションデータは、Slowly Changes Dimensions(SCD)分析でキャプチャされます。データウェアハウス環境では、ディメンションテーブルには、ディメンションデータと呼ばれる各レコードやその他の情報を一意に識別する主キーがあります。

    さまざまなSCDタイプのすべての更新方法は、IRICoSortのSortCLプログラムを使用して実行されます。 IRI Voracityには、SortCLプログラムの実行時に使用されるSCDジョブスクリプトの作成を支援するウィザードがあります。ほとんどのSCDタイプは、完全外部結合を使用して、元のデータソースのレコードを、それぞれのキーの同等化に基づいて更新されたソースのレコードと照合します。ただし、タイプ4は、並べ替えを使用して更新を実行します。

    タイプ4SCD

    タイプ4モデルは、タイプ2のモデルと似ています。違いは、2つのテーブルまたはファイルが維持されることです。1つは現在のコスト用で、もう1つはコストの履歴レコードを保持します。新しい現在のレコードがマスターに追加されると、これらの新しいレコードは通常、同時に履歴に追加されます。

    フィールド定義は、更新、履歴、およびマスターファイルまたはテーブルで同じです。更新と履歴のレコードを一緒に並べ替えます。 ProductCodeごとに1つのレコードのみを持つ新しいマスターが作成されます そのレコードが最新のものになります。履歴には、各 ProductCodeのすべてのレコードが含まれます 更新ソースからのものを含みます。

    開始マスターテーブルは、タイプ1の例の開始マスターと同じで、次のような値になります。

    コスト
    ProductCode StartDate
    C123 125.50 20110228
    F112 2365.00 20120101
    G101 19.25 20110930
    J245 450.50 20110430
    S022 98.75 20110515

    すべての更新データの開始日はすべて同じになります。 update.datソースには、次の値のレコードが含まれています。

    コスト
    ProductCode StartDate
    F112 2425.00 20120701
    J245 550.50 20120701
    M447 101.75 20120701
    S022 101.75 20120701

    以下の開始履歴ソースは、タイプ2の開始マスターに似ています。したがって、タイプ4はタイプ1とタイプ2の組み合わせであり、マスターはタイプ1マスターと同じであり、履歴はタイプ2マスターと同じです。

    コスト
    ProductCode StartDate
    C123 125.50 20110228
    F112 2365.00 20120101
    G101 19.25 20110930
    G101 21.25 20110501
    J245 450.50 20110430
    J245 425.25 20101001
    J245 385.25 20100215
    S022 98.75 20110515

    IRI Workbenchには、ディメンションファイルとテーブルを更新するためのスクリプトの作成を支援するVoracityウィザードがあります。このウィザードは、ナビゲーションバーの[Voracity]ドロップダウンにあります。まず、SCDタイプを選択します。次に、更新の処理に使用されるソースを選択するウィンドウが表示されます。


    次の画面では、キーを選択して並べ替えを設定します。 2つのキーがあります: ProductCode 次にStartDate ProductCodeでグループ化しています 、ただし、 StartDateの降順で並べ替える必要もあります。 各ProductCode内 グループ化。これは、各 ProductCodeの最新のレコードをフィルタリングできるようにするためです。 新しいマスターにグループ化します。

    StartDateを作成するには 降順で並べ替えるキー、そのキーを選択してから、キーの編集を選択します 。これにより、次の画面が表示されます。

    方向のドロップダウン 降順を選択します 。

    並べ替えのジョブスクリプトは次のとおりです。

    /INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD4/history4.dat
        /PROCESS=DELIMITED
        /ALIAS=history4
        /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
        /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
        /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
    /INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/update.dat
        /PROCESS=DELIMITED
        /ALIAS=update
        /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
        /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
        /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
    
    /SORT
        /KEY=(PRODUCTCODE, TYPE=ASCII)
        /KEY=(STARTDATE, DESCENDING, TYPE=ASCII)
    
    /OUTFILE=history4.dat
     # This file will contain all the records from both inputs
        /PROCESS=DELIMITED
        /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
        /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
        /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
    
    /OUTFILE=master4.dat
    # Include only one record for each ProductCode
        /PROCESS=DELIMITED
        /FIELD=(PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
        /FIELD=(COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
        /FIELD=(STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"')
        /INCLUDE WHERE PRODUCTCODE

    以下は、SortCLを使用して上記のジョブスクリプトを実行することによって生成された更新されたマスターです。値は、タイプ1の更新で生成されたものと同じです。

    コスト
    ProductCode StartDate
    C123 125.50 20110228
    F112 2425.00 20120701
    G101 19.25 20110930
    J245 550.50 20120701
    M447 139.25 20120701
    S022 101.75 20120701

    履歴ファイルには、以前のすべてのレコードと、更新ファイルの新しいレコードが含まれています。

    コスト
    ProductCode StartDate
    C123 125.50 20110228
    F112 2425.00 20120701
    F112 2365.00 20120101
    G101 19.25 20110930
    G101 21.25 20110501
    J245 550.50 20120701
    J245 450.50 20110430
    J245 425.25 20101001
    J245 385.25 20100215
    M447 101.75 220120701
    S022 101.75 20120701
    S022 98.75 20110515

    1. 最も近い日付を表示するSQLクエリ?

    2. 重複する日付範囲を削除して削減します

    3. PostgreSQLでのキャッシング

    4. SQLServerの既存の列にデフォルトの制約を追加する方法