2

リレーショナル データベースからデータ ウェアハウスを作成したい E コマース Web サイトがあります。リレーショナル データベースに支払いテーブルがあるとします。各支払いには、支払いプロセス中に変化するステータスがあります (これらのステータスは、新規、処理中、成功、失敗の可能性があると想像してください)。今、私は倉庫に PaymentFactTable を持ち、その中の各レコードが「特定のステータスの特定の時間のすべての支払い」を表すようにしたいと考えています。しかし、私の問題が発生する場所があります。私の ETL サービスが 1 時間の支払いを倉庫に転送してグループ化したと想像してください。しかし、これらの支払いは次の 1 時間でステータスが変わるので、どうすればよいでしょうか? 倉庫の支払いグループを更新するにはどうすればよいですか? 変更された支払いのグループを見つけて更新するための手がかりが倉庫にありません。もう 1 つの問題は、データを更新するために、これらのステータス変更について倉庫にどのように通知する必要があるかということです。

4

2 に答える 2

1

ここでプロセス フローを追跡しています。次元データ モデルでは、Ralph Kimball は、これを行うには、「累積スナップショット」ファクト テーブルと呼ばれるものを使用することを推奨しています。

基本的に、テーブルがどのように見えるかの例を次に示します。

PaymentAccFactID        Int
PaymentNaturalKey       Int (the "natural identifier" of a transaction)
CustomerDim             Int
PaymentTypeDim          Int 
... additional dims as needed ...
NewStatusTS             Timestamp (ansi timestamp)
NewStatusHourDim        Int
NewStatusFlag           SmallInt
ProcessingStatusTS      Timestamp 
ProcessingStatusHourDim Int
ProcessingStatusFlag    SmallInt
SucceededStatusTS       Timestamp
SucceededStatusHourDim  Int
SucceededStatusFlag     SmallInt
FailedStatusTS          Timestamp
FailedStatusHourDim     Int
FailedStatusFlag        SmallInt

ETL をプルするたびに、前回のプル以降に変更されたレコードをプルし、それに応じてステータスを変更します。フィールドは、日単位のディメンションに接続します。HourDimまたは、2 番目のフィールド セットを作成して、各ステータスの日 (日付) ディメンションにフックし、最初のフィールドは時刻ディメンションのみを指すようにすることもできます。

支払いが新規から処理中、成功/失敗へとプロセスを通過するにつれて、これを反映するために累積スナップショットの行を更新します。Flag特定の時点での特定のステータスの支払いを簡単に合計できるように、列を含めます。CurrentStatusDimステータス ディメンションにも適合させたい場合は、ステータス ディメンションに接続するフィールドを追加することもできます。ETL が、次の 1 時間で New から Succeeded / Failed に移動したことを検出した場合、その時間にも「処理中」に移動したことがわかりますが、支払いに関するイベントを追跡していない場合は、それが発生した特定の時間を知ることができます。

于 2012-07-23T00:09:07.340 に答える
0

私はあなたの状況にありました。これが私がしたことであり、それは本当にうまくいきました:

その日の深夜に「本は閉まっている」と判断し、すべてをそのまま倉庫に送りました。その日に完了したものはすべて倉庫に保管され、そこで変更されることはありませんでした。後で払い戻しなどが発生した場合は、倉庫の新しいトランザクションとしてカウントされます。

これは、彼らが嫌う「履歴を書き換える」ことは決してないという意味で、経理部門にとってはうまくいきました。IT担当者にとっても簡単でした。なぜなら、一度に1日だけデータを処理する必要があり、ウェアハウスデータを更新する必要がなかったからです(毎日挿入するだけでした)。

毎日があまりにも粗雑である場合は、代わりに1時間ごとにこれを行うことができますが、ほとんどの企業が毎日満足していることがわかるでしょう。

データのサイズが大きすぎて毎日実行できない場合は、その日の終了前日の最終的なトランザクションであることがわかっているトランザクションを前処理できます深夜以降の特に大量のトランザクションではこれを実行する必要がありました)。タイミングが重要なレポート要件)

于 2012-07-22T14:23:42.473 に答える