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

SCDタイプ1

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

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

    この記事では、更新データからの新しい情報がマスターソースの元の情報を上書きするSCDタイプ1モデルについて説明します。一致しない更新ソースのレコードが新しいマスターに追加されます。このモデルは古い値を現在の値で上書きする必要があり、履歴を保持しないため、あまり使用されません。

    更新は、フィールドProductCodeに関して結合することによって実行されます。この例では、現在のデータはソースファイルmaster1.datになり、update.datは、現在のマスターソースに値を変更したりレコードを追加したりするために使用されます。

    master1.datソースには次のものが含まれます:

    コスト
    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

    新しいディメンションテーブルは、更新後に次の値になります。

    コスト
    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

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

    次の画面は、マスターソースと更新ソースで実行される結合を定義するためのものです

    以下は、master1.datとupdate.datの2つのファイルを処理するときに生成されるsortclジョブスクリプトです。

    /INFILE=C:/IRI/CoSort95/workbench.orig/workspace/SCD/SCD1/master1.dat
      /PROCESS=DELIMITED
      /ALIAS=master1
      /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='\"')
    
    /JOIN FULL_OUTER NOT_SORTED master1 NOT_SORTED update WHERE MASTER1.PRODUCTCODE == UPDATE.PRODUCTCODE
    
    /OUTFILE=/master1.dat
    # This processes all except the new records
      /PROCESS=DELIMITED
      /FIELD=(MASTER1.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
      /FIELD=(COST_NEW, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.COST ELSE MASTER1.COST)
      /FIELD=(STARTDATE_NEW, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"', IF MASTER1.PRODUCTCODE EQ UPDATE.PRODUCTCODE THEN UPDATE.STARTDATE ELSE MASTER1.STARTDATE)
      /INCLUDE WHERE MASTER1.PRODUCTCODE NE ""
    /OUTFILE=master1.dat
    # This processes the new records to be added
      /PROCESS=DELIMITED
      /FIELD=(UPDATE.PRODUCTCODE, TYPE=ASCII, POSITION=1, SEPARATOR=",", FRAME='\"')
      /FIELD=(UPDATE.COST, TYPE=NUMERIC, POSITION=2, SEPARATOR=",", FRAME='\"')
      /FIELD=(UPDATE.STARTDATE, TYPE=ASCII, POSITION=3, SEPARATOR=",", FRAME='\"') I 
      /INCLUDE WHERE MASTER1.PRODUCTCODE EQ ""

    1. Django開発データベースをデフォルトのSQLiteからPostgreSQLに変更する

    2. MS SQL Server ManagementStudioを使用せずにSQLServerのデフォルトデータベースを変更するにはどうすればよいですか?

    3. WindowsでのPostgreSQL圧縮アーカイブログ

    4. SQLServer2019のトリガーイベントタイプの階層リスト