特許第5963845号(P5963845)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ザ・ボーイング・カンパニーの特許一覧

特許5963845一時的なデータウェアハウスにデータをロードするための方法およびシステム
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5963845
(24)【登録日】2016年7月8日
(45)【発行日】2016年8月3日
(54)【発明の名称】一時的なデータウェアハウスにデータをロードするための方法およびシステム
(51)【国際特許分類】
   G06F 12/00 20060101AFI20160721BHJP
【FI】
   G06F12/00 513A
【請求項の数】13
【全頁数】59
(21)【出願番号】特願2014-503662(P2014-503662)
(86)(22)【出願日】2012年3月2日
(65)【公表番号】特表2014-512608(P2014-512608A)
(43)【公表日】2014年5月22日
(86)【国際出願番号】US2012027417
(87)【国際公開番号】WO2012138437
(87)【国際公開日】20121011
【審査請求日】2015年3月2日
(31)【優先権主張番号】13/082,829
(32)【優先日】2011年4月8日
(33)【優先権主張国】US
(73)【特許権者】
【識別番号】500520743
【氏名又は名称】ザ・ボーイング・カンパニー
【氏名又は名称原語表記】The Boeing Company
(74)【代理人】
【識別番号】100109726
【弁理士】
【氏名又は名称】園田 吉隆
(74)【代理人】
【識別番号】100101199
【弁理士】
【氏名又は名称】小林 義教
(72)【発明者】
【氏名】ウィルソン, イアン アレグザンダー
【審査官】 篠塚 隆
(56)【参考文献】
【文献】 特表2005−527912(JP,A)
【文献】 特表2008−537266(JP,A)
【文献】 特開2000−276382(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F12/00
17/30
(57)【特許請求の範囲】
【請求項1】
入力データセットを一時的なデータウェアハウスにロードするように構成されたシステム(10、22、700)であって、
一時的なデータウェアハウスおよび入力データセットを含むストレージ装置(720)と、
前記ストレージ装置に結合されたプロセッサユニット(710)であって、該プロセッサユニットは、
前記入力データセットがソースデータベースからのデータのスナップショットを含むことを判断し、
前記入力データセット中の第1のデータレコードに関連した最も早いソースタイムスタンプを判断し、
前記最も早いソースタイムスタンプの直前のソースタイムスタンプと関連した前記一時的なデータウェアハウス中のデータレコードと、前記一時的なデータウェアハウス中の1または複数のデータレコードであって、前記最も早いソースタイムスタンプよりも遅いソースタイムスタンプに関連した1または複数のデータレコードとを示す主キーの組を認識し、
前記入力データセットを第1のパーティションおよび第2のパーティションを含む複数のパーティションであって前記複数のパーティションの各パーティションは複数のデータレコードを含む複数のパーティションに分割し、
前記第1のパーティションを前記認識された主キー組に基づいてプリロードテーブルにインポートし、
前記第2のパーティションを、前記認識された主キーの組に基づいて前記プリロードテーブルにインポートし、
前記プリロードテーブルを前記一時的なデータウェアハウスに適用し、
前記一時的なデータウェアハウス中のアクティブデータレコードが前記入力データセット中の前記複数のデータレコードの1つと関連していないことを検知し、
前記入力データセットが前記ソースデータベースからのデータの前記スナップショットを含むことの前記判断と前記検知とに基づいて前記アクティブデータレコードの暗示的削除を実行するようにプログラムされた、プロセッサユニット(710)とを含むシステム(10、22、700)。
【請求項2】
前記プロセッサユニット(710)は、少なくとも1つのデータレコードに対応するハッシュ値を生成するために前記少なくとも1つのデータレコードに関連付けられた主キーにハッシュ関数を適用することにより少なくとも部分的に前記複数のパーティションに前記入力データセットを分割するようにプログラムされ、前記主キーは前記主キーの組に含まれる、請求項1に記載のシステム(10、22、700)。
【請求項3】
前記プロセッサユニット(710)は、前記第1のパーティションが前記テーブルにプリロードされた後、前記第2のパーティションを前記プリロードテーブルにインポートするようにさらにプログラムされる、請求項1に記載のシステム(10、22、700)。
【請求項4】
前記プロセッサユニット(710)は、前記第1のパーティションが前記プリロードテーブルにインポートされている間、前記第2のパーティションを前記プリロードテーブルにインポートするようにさらにプログラムされる、請求項1に記載のシステム(10、22、700)。
【請求項5】
前記プロセッサユニット(710)は、並列インポートの現在の量が並列インポートの所定の最大量よりも少ないことの判定に基づいて、前記第1のパーティションが前記プリロードテーブルにインポートされている間、前記第2のパーティションを前記プリロードテーブルにインポートするようにプログラムされる、請求項4に記載のシステム(10、22、700)。
【請求項6】
前記プロセッサユニット(710)は、少なくとも部分的に、
前記第1のパーティション及び前記第2のパーティションの少なくとも一方のデータレコードを前記第1のパーティション及び前記第2のパーティションの前記少なくとも一方に対応する揮発性テーブルにインポートすることと、
前記データレコードを前記揮発性テーブルから前記プリロードテーブルにコピーすることと、
により前記第1のパーティションおよび前記第2のパーティションの前記少なくとも一方をインポートするようにプログラムされる、請求項1に記載のシステム(10、22、700)。
【請求項7】
前記プロセッサユニット(710)は、
以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む前記第1のパーティション内のデータレコードを識別し、
前記第1のパーティションを前記プリロードテーブルにインポートする際に前記識別されたデータレコードを除外する、
ようにさらにプログラムされる請求項1に記載のシステム(10、22、700)。
【請求項8】
一時的なデータウェアハウスへの複数のデータレコードのローディング方法であって、
前記データレコードがソースデータベースからのデータのスナップショットを含むことを判断すること、
前記データレコード中の第1のデータレコードと関連した最も早いタイムスタンプを判断することと、
前記最も早いソースタイムスタンプの直前のソースタイムスタンプと関連した前記一時的なデータウェアハウス中のデータレコードと、前記一時的なデータウェアハウス中の1または複数のデータレコードであって、前記最も早いソースタイムスタンプよりも遅いソースタイムスタンプに関連した1または複数のデータレコードとを示す主キーの組を認識することと、
前記データレコードを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割することと、
コンピューティング装置(700)により、前記認識された主キーの組に基づいて前記第1のパーティションをプリロードテーブルにインポートすることと、
前記コンピューティング装置により、前記認識された主キーの組に基づいて前記第2のパーティションを前記プリロードテーブルにインポートすることと、
前記プリロードテーブルを前記一時的なデータウェアハウスに適用することと、
前記コンピューティング装置により、前記一時的なデータウェアハウス中のアクティブデータレコードが前記複数のデータレコードとの1つと関連していないことを検知し、
前記コンピューティング装置により、前記データレコードが前記ソースデータベースからのデータの前記スナップショットを含むことの前記判断と前記検知とに基づいて前記アクティブデータレコードの暗示的削除を実行することと、
を備える方法。
【請求項9】
前記第1のパーティションおよび前記第2のパーティションは並列にインポートされる、請求項8に記載の方法。
【請求項10】
並列インポートの現在の量は、並列インポートの所定の最大量よりも少ないことを判定することであって、前記判定に基づいて前記第1のパーティションおよび前記第2のパーティションは並列にインポートされる、判定することをさらに備える、請求項8に記載の方法。
【請求項11】
列インポートの現在の量は、並列インポートの所定の最大量よりも多いか等しいことを判定することであって、前記判定に基づいて前記第1のパーティションおよび前記第2のパーティションは連続してインポートされる、判定することをさらに備える、請求項8に記載の方法。
【請求項12】
コンピューティング装置(700)により、前記データを前記複数のパーティションに分割することは、
少なくとも1つのデータレコードに関連付けられたハッシュ値を作成するために、ハッシュ関数を前記少なくとも1つのデータレコードに適用することと、
前記少なくとも1つのデータレコードに対応するおよび関連付けられたパーティション数を決定するためにパーティションの所定量に基づいてモジュロ演算子を前記ハッシュ値に適用することと、
を備える、請求項8に記載の方法。
【請求項13】
以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む第1のパーティション内のデータレコードを識別することと、
前記第1のパーティションを前記プリロードテーブルにインポートする際に前記識別されたデータレコードを除外することと、
をさらに備える、請求項8に記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示の分野は一般的にコンピュータデータウェアハウス(CDW)に関し、より具体的には、一時的に正規化されたデータウェアハウスのメタデータ駆動型データキャプチャの方法およびシステムに関する。
【背景技術】
【0002】
シーケンシャルな方法に頼ることなく単一の汎用設計で入力データの迅速なロードおよびタイムシーケンス変化ボリュームへの必要性が存在する。シーケンシャルな方法は一般的に初期化のためおよびより高いボリューム入力データイベントで使用するためには効率的な手段ではない。さらに、データ内の変更を検出する集中的前処理を時には低減するおよび/またはインターフェースタイプに関係なくすべての目標テーブルの候補行のロードセットの作成を可能にするために一意の有効期間を保証する必要がある。最後に、データストレージに関連するコストのため、すべてのタイプのデータの変更を識別し、新たなオーサリングタイムスタンプ(有効期間)を超える新たなコンテンツがない新たなデータ行のロードを避ける必要性がある。このような行為は期間内のデータの連続する重複行を折り畳むことによりストレージの使用量を減らすのを助けるかもしれない。
【0003】
現在、大規模な外部のアプリケーションサーバ上で典型的に実行されている複雑なカスタムデータロードプログラムは一時的なデータウェアハウスをロードするための試みで実装されている解決策である。このようなプログラムは主キーにより順次にデータを処理および適用し、結果として長い実行時間および目標テーブルへの広範な相対的に邪魔なアップデートになることがある。いくつかの例では、ユーザを継続的にサポートするため、ローディングが完了したときに目標テーブルの2つのセットが使用されスワップされる。しかしながら、このようなシステムでは、典型的にデータベース内の一部のデータが既に削除され、入力データと共にアプリケーションサーバ上で外部的に処理され、ネットワークおよびデータベースをさらに強調するデータロードを達成するために再ロードされる。他の既知の既存の解決策はまた、予期しない場合ロードを止める、中止する、またはデータを拒否するすべての可能性のある状況ではなく所期の状況のみに適応する傾向がある(例えば、主キー内の有効期間関係)。
【0004】
その他の熟考された解決策は一般的に他の欠点を有している。例えば、入力データおよび正確な目標スキーマの特定のタイプを受け入れるようにハードコーディングされている設計は開発コストのために望ましくない。さらに、メンテナンスコストはデータソース、データ目標、またはインターフェースの方法への主キーまたは属性変更を扱う際に懸念事項となるかもしれない。サーバ上のデータベースの外部作業を実行する抽出(extract)、変換(transform)、およびロード(load)(ETL)ツールの使用は一つの可能な解決策であるが、非効率的でありネットワークトラフィックの量により影響を受けることがある。データウェアハウスで広く使用される超並列処理(MPP)アーキテクチャ上での外部または行毎(row−at−a−time)解決策を使用する際に熟考された解決策の効率性の損失が特に大きい。また、独自のデータベースツールは専門的な知識を必要とし、他のプラットフォーム(例えば、OracleのPL/SQL)に移植できない。これらの解決策は、準リアルタイム、非侵入型のロードを不可能にし、初期化のための異なるコーディングまたは許容可能なパフォーマンスを実現するためのデータの大容量ボリュームを必要とするかもしれない、データのより大容量ボリュームに対して非効率的である。
【発明の概要】
【0005】
一態様では、一時的なデータウェアハウス内に入力データセットをロードするのに使用するためのシステムが提供される。システムはストレージ装置およびストレージ装置に結合されたプロセッサユニットを含む。ストレージ装置は一時的なデータウェアハウスおよび入力データセットを含む。プロセッサユニットは入力データセットを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割するようにプログラムされる。複数のパーティションの各パーティションは複数のデータレコードを含む。プロセッサはまた第1のパーティションをプリロードテーブルにインポートし、第2のパーティションをプリロードテーブルにインポートし、プリロードテーブルを一時的なデータウェアハウスに適用するようにプログラムされる。
【0006】
別の態様では、一時的なデータウェアハウスに複数のデータレコードをロードするのに使用するための方法が提供される。この方法は、コンピューティング装置により、データレコードを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割することを含む。第1のパーティションおよび第2のパーティションはコンピューティング装置によりプリロードテーブルにインポートされる。プリロードテーブルはコンピューティング装置により一時的なデータウェアハウスに適用される。
【0007】
さらに別の態様では、コンピュータプログラム製品が提供される。コンピュータプログラム製品はネット変更データ(正味の変更データ)とともにデータウェアハウスをロードするための具現化されたコンピュータ実行可能命令をその上に有する非一時的なコンピュータ可読媒体を含む。少なくとも1つのプロセッサにより実行される場合、コンピュータ実行可能命令はプロセッサが入力データセットを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割するようにさせる。複数のパーティションの各パーティションは複数のデータレコードを含む。コンピュータ実行可能命令はまたプロセッサが第1のパーティションをプリロードテーブルにインポートし、第2のパーティションをプリロードテーブルにインポートし、プリロードテーブルをデータウェアハウスに適用するようにさせる。
【図面の簡単な説明】
【0008】
図1】コンピュータシステムの簡略化したブロック図である。
図2】コンピュータネットワークのブロック図である。
図3】例示的な変更データキャプチャプロセスを示すフローチャートである。
図4】例示的なパーティションロードプロセスを示すフローチャートである。
図5】例示的なデータアプリケーションプロセスを示すフローチャートである。
図6図4に示すステップ100に関連付けられたデータフロー図である。
図7図4に示すステップ101に関連付けられたデータフロー図である。
図8図4に示すステップ102に関連付けられたデータフロー図である。
図9図4に示すステップ103に関連付けられたデータフロー図である。
図10図4に示すステップ104に関連付けられたデータフロー図である。
図11図4に示すステップ105に関連付けられたデータフロー図である。
図12図4に示すステップ106に関連付けられたデータフロー図である。
図13図4に示すステップ107に関連付けられたデータフロー図である。
図14図4に示すステップ108に関連付けられたデータフロー図である。
図15図4に示すステップ109に関連付けられたデータフロー図である。
図16図4に示すステップ110に関連付けられたデータフロー図である。
図17図4に示すステップ111に関連付けられたデータフロー図である。
図18図4に示すステップ112に関連付けられたデータフロー図である。
図19図5に示す適用ステップ202に関連付けられたデータフロー図である。
図20図5に示す適用ステップ203に関連付けられたデータフロー図である。
図21図5に示す適用ステップ204に関連付けられたデータフロー図である。
図22図5に示す適用ステップ205に関連付けられたデータフロー図である。
図23図5に示す適用ステップ206に関連付けられたデータフロー図である。
図24】例示的なコンピューティング装置のブロック図である。
【発明を実施するための形態】
【0009】
実施形態は変更データキャプチャ(CDC)プロセスを参照して本明細書に記述されている。本明細書で使用するとき、用語「CDC」は一時的なデータウェアハウスへの変更をキャプチャし適用するプロセスを指す。CDCプロセスへの入力、入力データセットは目標ウェアハウス(例えば、正規化された、ビジネスまたは自然キー)のデータモデルと一致するように既に変換されていてもよいが、タイムシーケンス、一時的な正規化および/または一時的な衝突を解決することなどのような一時的な処理なしでもよい。入力データセットはCDCプロセスにより直接アクセス可能であるように、データベースシステムに既にロードされていてもよい。
【0010】
本開示は、コンピュータまたはパーソナルデータアシスタントまたは他のハンドヘルド装置のような他の機械により実行されるプログラムモジュールなどのコンピュータ実行可能命令を含む、コンピュータコードまたは機械使用可能な命令の一般的なコンテキストで説明されてもよい。一般的には、ルーチン、プログラム、オブジェクト、コンポーネント、データ構造などを含むプログラムモジュールは、特定のタスクを実行する、または特定の抽象データ型を実装するコードを指す。本開示は、ハンドヘルド機器、民生用電子機器、汎用コンピュータ、より専門的なコンピューティング装置などを含む様々なシステム構成で実施されてもよい。本開示はまた通信ネットワークを介してリンクされるリモート処理装置によりタスクが実行される分散コンピューティング環境で実施されてもよい。
【0011】
説明されるシステムは、それ自体および演算子のリレーショナル代数セットを使用して、データウェアハウス内に既に格納されたデータと比較するように、ネット変更データを識別しシーケンスする既存のデータウェアハウスに関して、入力データセットと呼ばれてもよい、入力データのセットを解析することが動作可能であり、データウェアハウスへのアップデートを適用する。入力データセットはソースデータベース(例えば、ある時点でのソースデータベース内のすべてのデータレコード)のスナップショットを表していてもよい複数のデータレコードおよび/またはソースデータベースに対して実行された複数のメッセージまたはトランザクション(例えば、挿入(inserts)、アップデート(updates)、および/または削除(deletes))を含む。
【0012】
構造化照会言語(SQL)コードのような、データウェアハウスに対応するこのような方法、ソフトウェアコードを達成することが、本明細書に記述されたソフトウェアがビルドされる(例えば、コンパイルされる)際、ソフトウェアが展開される際、および/またはメタデータ(例えば、データベース構造)が改訂される際に、生成されてもよい。生成されたコードは次にデータがデータウェアハウスにロードされるたび毎にシステムにより実行されてもよい。いくつかの実施形態では、生成されたコードは1つ以上のストアドプロシージャ(例えば、データベース内に格納されこれにより実行される機能コード)により生成され、生成されたコードをデータベース内に格納する。データのロード中に、入力データに対して生成されたステートメントが取り出され実行される。
【0013】
データウェアハウスに入力データをロードするプロセスの実行時間および/またはコンピューティングリソースの使用率などのような性能は、1つ以上の最適化オプションを使用して改善されてもよい。コンピューティングリソースの使用率は、限定はされないが、プロセッサ使用率、メモリ使用率、および/またはネットワーク使用率を含んでいてもよい。最適化オプションは、例えば入力データを分割することおよび各パーティションを別々に処理すること、目標テーブルにデータを適用する前に揮発性テーブルへの入力データをインポートすること、入力データへの必要がないときに目標テーブルの比較から履歴をフィルタリングすることおよびデータを一時的に正規化する方法を含む。
【0014】
本明細書に記述の実施形態はデータロードコードを作成するSQLコードジェネレータを含む一般的なメタデータ駆動型の一時的なデータウェアハウスのロードの設計に関連する。実行時に、データロードコードは、有効期間と同等のものを生成するためにすべてのテーブルの主キー内の有効な開始タイムスタンプを有することに基づく一時的なデザインへのネット変更情報を識別することおよびシーケンスすることおよびset−SQLステートメントのみを使用して対応する有効な終了タイムスタンプまたは同等の期間の事前設定をする、ソースシステムデータの任意のボリューム(初期ロード、移行、毎日、毎時)および任意のタイプ(プッシュまたはプル、新しいまたは古いデータ)を効率的に処理し正規化された一時的なデータウェアハウスにロードすることができる。このようなプロセスは時として一括して変更データキャプチャ(CDC)と呼ばれる。
【0015】
開示した一時的なデータウェアハウスのロード設計はネット変更を決定するためにそれ自体に関するおよび既存のデータウェアハウスに関する両方の入力データのセットを解析することにより動作する。適切で有効なタイムシーケンス(一時的設計)は次にANSI SQLのみを使用して目標データウェアハウス内での期間を定義する終了タイムスタンプへの新しいシーケンス行およびアップデートに割り当てられ効率的に適用される。このプロセスはSQLステートメント(例えば、挿入および一時的アップデート)を事前生成し、データをロードする際に、データウェアハウスデータベース内全体でSQLを取得し実行する。
【0016】
本明細書に記述の実施形態の例示的な技術的効果は、これらには限定されないが、(a)入力データセットを第1のパーティションおよび第2パーティションを含む複数のパーティションに分割することであり、複数のパーティションの各パーティションは複数のデータレコードを含み、(b)ハッシュ関数およびパーティションの所定量に基づいて入力データセットを分割すること、(c)順次または並列に(例えば、同時に)、第1のパーティションおよび第2のパーティションをプリロードテーブルにインポートすること、(d)プリロードテーブルを一時的なデータウェアハウスに適用すること、(e)パーティションを対応する揮発性テーブルにインポートすること、(f)パーティションを揮発性テーブルからプリロードテーブルにコピーすること、(g)以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む、第1のパーティション内のデータレコードを識別すること、(h)第1のパーティションをプリロードテーブルにインポートする際に識別されたレコードを除外すること、(i)一時的なデータウェアハウス内のアクティブデータレコードが入力データセット内のデータレコードに関連付けられていないことを検出することに基づいて、アクティブデータレコードの暗示的削除を実行すること、(j)入力データセット内の第1のデータレコードに関連付けられた最先のソースタイムスタンプを決定すること、(k)最先のソースタイムスタンプの直前のソースタイムスタンプに関連付けられた一時的なデータウェアハウス内のデータレコードを表す主キーのセットおよび最先のソースタイムスタンプよりも後のソースタイムスタンプに関連付けられている一時的なデータウェアハウス内の1つ以上のデータレコードを識別すること、および(l)主キーの識別されたセットに基づいて第1のパーティションおよび第2のパーティションをインポートすること、を含んでいてもよい。
【0017】
実施形態は材料の明細に関する情報(部品表)および/または部品(例えば、機械設備の部品)に関する情報を格納するデータウェアハウスなどのような特定の用途を参照して以下に説明されてもよい。そのような実施形態は任意の一時的なデータウェアハウスに適用可能であることが予期される。
【0018】
図1は、サーバシステム12、およびサーバシステム12に接続されたクライアントシステム14とも呼ばれる、複数のクライアントサブシステムを含む例示的なシステム10の簡略化されたブロック図である。以下でより詳細に説明される、コンピュータ化されたモデリングおよびグルーピングツールは、サーバシステム12に格納され、クライアントシステム14(例えば、コンピュータ)のいずれかにおいてリクエスタによりアクセスすることができる。図1に示すように、クライアントシステムは、サーバシステム12がインターネットを使用してクライアントシステム14にアクセス可能であるように、ウェブブラウザを含むコンピュータ14である。クライアントシステム14は、ローカルエリアネットワーク(LAN)またはワイドエリアネットワーク(WAN)、ダイヤルイン接続、ケーブルモデム、および特殊高速ISDN回線等のネットワークを含む多くのインターフェースを介してインターネットに相互接続される。クライアントシステム14は、ウェブベースの電話、パーソナルデジタルアシスタント(PDA)、または他のウェブベースの接続可能な機器を含むインターネットに相互接続することができる任意の装置とすることができる。以下でより詳細に説明するように、データベースサーバ16は事項の様々な情報を含むデータベース20に接続される。一実施形態では、集中型データベース20はサーバシステム12に格納され、クライアントシステム14のいずれかを介してサーバシステム12にログオンすることによりクライアントシステム14のいずれかのポテンシャルユーザによりアクセスすることができる。代替実施形態では、データベース20はサーバシステム12からリモートに格納され非集中型であってもよい。
【0019】
図2は、システム22の例示的な実施形態の拡張ブロック図である。システム22は適切なコンピューティング環境の一例であるが、本発明の使用または機能の範囲に関するいかなる限定を示唆するものではない。システム22は本明細書に示される構成要素のいずれか1つまたは組合せに関する依存性または要件のどちらをも有すると解釈されるべきではない。システム10の構成要素(図1参照)と同一の、システム22内の構成要素は図1で使用される同じ符号を使用して図2で識別される。システム22はサーバシステム12およびクライアントシステム14を含む。サーバシステム12は、データベースサーバ16、アプリケーションサーバ24、ウェブサーバ26、ファックスサーバ28、ディレクトリサーバ30、およびメールサーバ32をさらに含む。ディスクストレージユニット34(データベース20を含む)はデータベースサーバ16およびディレクトリサーバ30に結合される。サーバ16、24、26、28、30、および32はローカルエリアネットワーク(LAN)36に結合される。さらに、システム管理者のワークステーション38、ユーザワークステーション40、およびスーパーバイザのワークステーション42はLAN36に接続される。代替的に、ワークステーション38、40、および42は、インターネットリンクを使用してLAN36に結合されるか、またはイントラネットを介して接続される。いくつかの実施形態では、データベースサーバ16はディレクトリサーバ30などのような他の装置にアクセスできないディスクストレージユニット34に結合される。
【0020】
各ワークステーション38、40、および42はウェブブラウザを有するパーソナルコンピュータである。ワークステーションで実行される機能は典型的にはそれぞれのステーション38、40、および42で実行されるものとして示されているが、そのような機能はLAN36に結合された多数のパーソナルコンピュータのいずれかで行うことができる。ワークステーション38、40、および42はLAN36へのアクセスを有する個々により実行することができる異なったタイプの機能の理解をただ容易にするために別々の機能に関連するものとして示されている。
【0021】
サーバシステム12は社員44を含む様々な個々人およびインターネットサービスプロバイダ(ISP)のインターネット接続48を使用する第三者、例えば顧客/請負業者46に通信可能に結合されるように構成される。例示的な実施形態における通信はインターネットを使用して実行されるものとして示されているが、任意の他のワイドエリアネットワーク(WAN)タイプの通信が他の実施形態で利用することができ、すなわちシステムおよびプロセスはインターネットを使用して実施されることに限定されない。加えて、WAN50というよりも、ローカルエリアネットワーク36をWAN50の代わりに使用することができる。
【0022】
例示的な実施形態では、ワークステーション54を有する任意の許可された個々人はシステム22にアクセスすることができる。クライアントシステムのうち少なくとも1つはリモートロケーションに配置されたマネージャワークステーション56を含む。ワークステーション54および56はウェブブラウザを有するパーソナルコンピュータである。また、ワークステーション54および56はサーバシステム12と通信するように構成される。さらに、ファックスサーバ28は電話リンクを使用してワークステーション56を含む遠くに位置するクライアントシステムと通信する。ファックスサーバ28は他のクライアントシステムおよび/またはワークステーション38、40、および42とも同様に通信するように構成されている。
【0023】
図1および図2のシステムを利用して、非常に効率的で比較的非侵入性の準リアルタイムロードはユーザのクエリを中断することなくスケジュールされたミニバッチ実行を介して有効になっている。プロセスは標準ANSI SQLに基づいており、したがって、特に超並列処理(MPP)アーキテクチャ上で、データベース管理システム(DBMS)能力に効力を発揮し、超線形スケーラビリティを提供する、任意のデータベースプラットフォームに適用可能であり、外部サーバ上でデータ処理を必要としない(例えば、SQLはどこからでも呼び出すことができる)。一実施形態では、データウェアハウスのロードは完全に主キー定義の使用を通じた実行時のメタデータ駆動型およびパラメータとしてテーブル名である。もう一つの利点はスキーマの変更は変更データキャプチャシステムの再コンパイルまたは再起動を必要としないことであり、運用メタデータは任意のとき間に変更されてもよい(例えば、明示的または暗示的な削除フォーム、パーティションの量、および/または並列度のレベル)。そうでなければ、任意のインターフェースタイプに適応することができ、データモデル(有効時間はすべての主キーに含まれる)内のすべてのテーブルは単一のプログラムを適応することができる。候補行のみが入力(列+有効なタイムスタンプ)として要求され、どちらかといえば、何が変更されたのかの識別は変更データキャプチャシステムへの入力として必要ない。スナップショットインターフェースの場合は、削除の識別は必要ない。有効時間の関係はデータセットおよび複数の呼び出し内でおよびその全体に渡って非常に短いシーケンス時間で主キー内で壊れている可能性がある。遡及的および/または履歴的アップデートは入力および既存データの両方のとき間シーケンシングをアップデートすることにより実行される。
【0024】
既存の解決策がしばしばインターフェースタイプに合わせてカスタマイズされており、典型的には完全に各テーブルの列毎にハードコードされているため、上記の改善は既存の解決策に関して実現される。加えて、一時的なシーケンシングへの既存のアプローチは単一の行毎であり、set−SQL(例えば、集合演算子のリレーショナル代数を使用)を介してひとまとめではない。したがってこれらの解決策は変更データキャプチャシステムが行うように超直線的にスケーリングしない。例えば、本明細書に説明の実施形態は100行を処理するのに必要な時間の10倍未満で1,000行を処理してもよい。例示的な実施形態では、処理中のデータベースからデータは除去されず、変更データキャプチャシステムの呼び出し形式は外部(例えば、Perl)または内部データベース手続きであり得る。
【0025】
説明される実施形態は識別変更(例えば、挿入、アップデート、削除、再表示、および/または履歴アップデート)および開始−終了の有効なタイムスタンプにより定義された期間を介して履歴を保持する一時的なデータウェアハウスへの適用変更に関連付けられた開発コストを削減することおよび潜在的に排除することを容易にする。非効率的なカーソル(行毎)、外部データロードサーバを使用し関連するネットワークトラフィックを生成する既存の解決策とは異なる、DBMSエンジンおよびset−SQLでのアーキテクチャを活用する、効率的かつ非常にスケーラブルな設計が説明される。最小限の侵入型設計は、エンドユーザのロック方法およびSQL修飾子を介して一時的履歴の使用を含むが、これらに限定されない様々なクエリ手法を使用して効率を最大化された非常に迅速なset−SQL適用トランザクション(ワークロードを最小化しDBMS内のスループットを最大化するための最終ステージおよび目標の同じ構造)を介してロード中に連続クエリを可能にする。
【0026】
本明細書でさらに説明するように、実施形態はデータベースカタログ(例えば、列名および基本データ型情報)および主キーメタデータテーブルに対して問い合わせ(クエリ)することによりデータをロードするためのSQLステートメントを生成し格納するSQLジェネレータのシーケンスとして少なくとも部分的に実装されてもよい。事前に生成されたSQLは入力データに対して実行時に実行されてもよい。下記に説明されるステップのシーケンスは目標データベース内の候補行を単一の効率的なトランザクションで解析し、準備し、適用する。これらのステップはデータベースに対するSQLジェネレータを実行するためのアクセス権を持つ任意のプログラミング、スクリプトまたはプロシージャ言語で実装することができ、データベースに対する結果のSQLステートメントをフェッチし、フェッチされたステートメントを実行する。
【0027】
以下は本明細書で使用される特定の用語および略語の定義を含む。オンライントランザクション処理(OLTP)データベースは正規化されたデータベース構造を典型的に含むトランザクションベースのデータベースである。例えば、OLTPのデータレコード(例えば、テーブル内の行)はその参照されるデータレコード内のデータのコピーとは対照的に、別のデータレコード(例えば、別のテーブル内の行)への参照を含んでいてもよい。さらに、OLTPデータベースはこのような参照が有効であることを保証するために参照整合性を強制してもよい(例えば、現存するデータレコードおよび/または特定のタイプのデータレコードを参照する)。
【0028】
主キー(PK)は目標テーブル(例えば、コアテーブル、非コアテーブル、または派生層)のデータモデリングツールで定義されている完全な主キーである。本明細書で使用するとき、「非コア」テーブルとは目標データベース層として本明細書に示される正規化された一時的な目標テーブルである。PKはSOURCE_START_TS(データベースビューCDW_PK_COLS_Vで利用可能)と呼ばれるソースシステム開始タイムスタンプ列を含み、履歴の保持をサポートする。ソースタイムスタンプは多くのシステムでそれを作成し作成または最後の修正のタイムスタンプと呼ばれることもあるオーサリングシステムの行の有効期間の開始を表す。一時的なデータウェアハウスの有効期間は、このケースではSOURCE_START_TSの包括的およびSOURCE_END_TSの排他的期間を表すタイムスタンプの対(例えば、開始タイムスタンプおよび終了タイムスタンプ)として表されてもよい。
【0029】
PK_LatestはSOURCE_START_TSを除く主キーであり、典型的にオンライントランザクション処理システムのビジネスキー(データベースビューCDW_PK_COLS_LATEST_Vで利用可能)である。
【0030】
W_tableは入力データセット変換の目標である。例示的な実施形態では、W_tableは両方の一時的な期間を表す標準の開始終了タイムスタンプの2組は省略されるが、SRC_START_TSと名称付けられる現在のソースシステムタイムスタンプとともに非コアテーブルのコピーを含む。オプションのALL_VT(以下でより詳細に説明する)がYに設定されている際に、W_tableの揮発性コピーを使用してもよい。
【0031】
X_tableは目標テーブルにロードされたすべての行のソースのプリロードテーブルである。X_tableは割り当てアクション(ETLインジケータ)およびソース(source)の代わりにsrcとして名称付けられた2つのソースタイムスタンプを格納するカラムの追加とともに目標テーブルのコピーであってもよい。
【0032】
目標はデータウェアハウスの範囲を表す一意の名称付けをされたテーブルを持つ単一のデータベースに対応する1層のコンピュータデータウェアハウスである。非コアは目標の一例である。他の潜在的なデータベーステーブル層はコア(例えば、第3正規形、すなわち3NFで完全に統合された)および派生(例えば、事前結合された、集約された)である。すべてのプロセスは、非コアまたはコアテーブルを潜在的に供給源として派生するデータで、特に明記しない限りこれらの3つの層に適用することができるが、それでもプロセスを呼び出す前にW_tableへの入力として提示することができる。オプションALL_VT(以下でより詳細に説明する)がYに設定されている際は、目標の揮発性コピーが使用されてもよい。
【0033】
ALL_VTオプションはシステムが揮発性作業テーブルを使用すべきかどうかを示す。ALL_VTが無効になっている際(例えば、Nに設定)には、システムはそれらの目標の対応物に基づいたステージデータベース内に生成された2つの作業テーブル(例えば、W_tableおよびX_table)を使用する。第3の揮発性または非永続性テーブルはW_tableをロードするために本明細書に記述されたプロセスの実行前に利用されてもよい。目標テーブル毎に、CDCプロセスによる使用のための入力データセットを変換するために外部で使用される他の任意のテーブルに加えて、ステージング領域データベースにビルドされたこれらのテーブルの3つまでのスクリプトが生成した変異型があってもよい。ALL_VTが有効になっている際(例えば、Yに設定)には、これらの揮発性テーブルのコピーが作成される。これらの3つのテーブルはデータベースモデリングツールにより直接モデル化されてはいけない追加のテーブルである。むしろ、それらは、実行時にビルドされる揮発性テーブルを除き、ビルド時にスクリプトによりビルドされ目標ビルドスクリプトに含まれてもよい。
【0034】
例示的な実施形態では、表1に示すようにスクリプトは各テーブルを作成し名前を指定する。
【0035】
【表1】
【0036】
W_tableは、明示的な削除を除いて、CDCシステムを起動する前のすべてのステージ変換のための目標テーブルである。X_tableはすべての目標データの直接のソースであり、明示的またはカスケード型削除の場合にはW_tableまたは潜在的に外部プロセスを経由してのいずれかからロードされる。CDCシステムの適用フェーズでは本明細書の他の箇所で定義されているようなI、O、U、DのようなX_table内でETLインジケータコードを追加するまたは使用する。CDCシステムに関連するコードはデータをW_tableからX_tableに移動する際に初期化または設定し、さらに目標データベースへの変更の最終的なアプリケーションを制御する前にX_table内でアップデートされる。
【0037】
例示的な実施形態では、ALL_VTが有効になっている際には、スクリプトはTNAMEが実際の目標テーブル名に対応する、表2に示すテーブルを作成しアクセスする。
【0038】
【表2】
【0039】
抽出、変換、およびロード(ETL)の操作は表3に示すETLインジケータを使用して呼ばれてもよい。
【0040】
【表3】
【0041】
上記のように、抽出、変換、およびロード(ETL)インジケータはI、U、O、およびDを含み、各々は既存の行上での新しい目標行のロードまたはタイムスタンプの終了などのような、1つまたは複数の目標非コアテーブルアクションに関連付けられる。ETLインジケータIについては、非コアアクションは新しい行の挿入であり、新しい目標行の終了タイムスタンプは取って代わられるまたは論理的に削除されるまでNULL(最新行、有効期間の終了なし)である。ETLインジケータUについては、非コアアクションは新しい行の挿入、非コア最新行終了タイムスタンプ(既に有効期間が切れていない場合)のX_tableで主キー(PK)内にある最先のU行開始タイムスタンプへのアップデートである。任意の終了タイムスタンプは他のX_tableレコードから来る。最新行がX_tableでPK内、または次のX_table行の開始である場合、インジケータUの新しい目標行終了タイムスタンプはNULLである。期間ギャップが明示的に論理的削除を介して設定されるかまたはそうでなければ事前に指定されていない限り、終了タイムスタンプまたは終了期間行が主キー内の後続行の開始タイムスタンプにより暗示される。このようにデフォルトの終了タイムスタンプまたは新しい行の有効期間は「取って代わられるまで」である。
【0042】
ETLインジケータOについては、最新の主キー(PK_Latest)内で最新の開始タイムスタンプではない、または最新の行ではあるがその開始タイムスタンプが主キー内の最新の有効期間よりも古いという点では、非コアアクションはシーケンスアップデート外にある新しい行の挿入である。いずれの場合も、行はX_tableでまたは非コアへのロード後のいずれかで、終了タイムスタンプに関連付けられる(すなわち、事前期限切れである)。インジケータD(論理的削除)については、非コアアクションは有効期間内の終了タイムスタンプまたは以前のX_table(直前の場合)とともに最新の現在の目標テーブル行のアップデートであり、X_table行のその開始タイムスタンプからの終了タイムスタンプの設定である。行は直接ロードしない。インジケータDの新しい目標行終了タイムスタンプは初期値はNULLであり、後でX_table内でより新しい行に基づいてアップデートされてもよい。
【0043】
例示的な実施形態では、ETL CDC処理およびコードジェネレータはステージテーブルに事前設定された主キーメタデータに依存する。2つのビューがSOURCE_START_TSを含む完全なデータウェアハウスの主キー、またはSOURCE_START_TSを除く、典型的にはOLTPビジネスキーである、このキーの最新ビューのどちらかを提供するために作成される。加えて、コードジェネレータはデータベース構造を記述する情報(例えば、データベース、テーブル、および/または列)を提供する、標準的なデータベースカタログビューに依存する。唯一のビューとして実装されてもよい最初のビューはCDW_PK_COLS_LATEST_Vと名称付けられてもよい。ベーステーブル上のビューであってもよい2番目のビューはCDW_PK_COLS_Vと名称付けられてもよい。最初のビューおよび2番目のビューの両方はモデリングツール主キーからロードされ、DATA_LAYER上のクエリ、および通常非コアを使用し、ETL処理の派生層である。
【0044】
変更データキャプチャプロセスはワークテーブル、すなわちW_tableおよびX_tableの一般的な形式および先に述べた2つのビューを介して主キーメタデータの可用性を構築するために定義された標準化されたスキーマのプロセスに基づいて動作する。
【0045】
変更データキャプチャプロセスの機能の概要に関して、ステージングテーブルからW_table(ステージデータベース内)へのソースデータの変換およびロードを通じて、派生したおよび任意の他の関連したデータロードの、非コア毎のソース−システム特定の変換プロセスは、明示的な削除メッセージを除いて、変更データキャプチャを呼び出す前に実行される。W_tableをロードするプロセスは典型的にテーブル毎に独立しているが、データベースに定義された特定の変換プロセスに基づいて完全に独立していなくてもよい。
【0046】
一実施形態では、W_tableおよびX_tableはソースシステムの各CDC実行の開始前に空にされる。変更データキャプチャは、明示的な削除を除き、X_tableを介してW_tableからコンピュータデータウェアハウス(CDW)データ層(例えば、非コア)にデータをロードする。例示的な実施形態では、このプロセスは目標テーブル全体の可能な範囲で並列化され、相互依存性を有していない。
【0047】
例示的な実施形態では、CDCシステムは比較的短い時間(典型的には数秒以内)でset−SQLを使用して単一のデータベーストランザクション内の各目標テーブルにフェーズロードを適用する。これらのトランザクションはテーブル全体の可能な範囲で並列化され、相互依存性を有していない。本明細書にて説明される変更データキャプチャシステムおよび方法は、一時的判定基準に効力を発揮してもよい適切なクエリアクセス方法に基づいて、レポートを中断することなくCDWの柔軟で迅速なロードを可能にするミニバッチの設計に関連する。目標テーブルをロードするためにデータベースユーティリティは使用されていない。所与のソースシステムまたは関連テーブルのセットについては、バッチ全体の実行は新しいバッチの実行を開始する前に完了されてもよい。換言すれば、データロードのCDC関連の部分は目標テーブルに関して並列または重ならないように実行される。
【0048】
CDCシステムは、論理的な削除により作成されたギャップを除いて、削除タイムスタンプに指定されたソースシステム(削除用)または次の行のソース開始タイムスタンプのみに典型的に設定されるソース終了タイムスタンプ(source_end_ts)とともに既存の目標行の2つの標準終了タイムスタンプ(ソースまたは有効およびトランザクションまたはETL)のみをアップデートする。これは、一般性を失うことなくタイムスタンプのペアの代わりに、可能であれば期間タイプを使用して実装されてもよい有効期間を事実上アップデートする。すべての新しいデータ(例えば、任意の新しいキーまたは非キー属性値)は結果として新しい目標行となる。いくつかのケースで指定された派生テーブルが完全に最新の内容にされてもよいことを除き、他のCDW列はCDCプロセスにより目標テーブル内でアップデートされなくてもよい。
【0049】
CDCシステムはデータモデルから直接ロードされたコンピュータデータウェアハウスメタデータ毎に主キーの一意性を保証する。アクティブな整合性制約を実装することは想定または要求されていない。したがって、受動的なチェックスクリプトはさらに検証として実行されてもよい。CDCシステムはまたタイムスタンプの範囲が有効であることをも保証する。例えば、システムは終了ソースまたは有効なタイムスタンプが開始タイムスタンプよりも大きいまたは等しいこと、および/またはPK以内であること、ソース開始タイムスタンプが削除を除き前の行のソース終了タイムスタンプに等しいこと、および/または論理的に削除しない限りソース終了タイムスタンプが主キー内の最新行のNULLであることを確認してもよい。同様の機能はタイムスタンプのペアの代わりに期間データ型上で想起される動作であってもよい。
【0050】
CDCシステムは、ソース開始タイムスタンプがソースデータ行(W_tableおよびX_table内でSRC_START_TSと名称付けされる)から常に事前設定されるタイムスタンプのみであることと、両方の一時的な期間を表す4つのすべての標準化されたタイムスタンプを取り込む。ソース終了タイムスタンプ属性はまた一意なコンテンツまたは現在行の削除時間(既知の場合、別に現在時間)とともに主キー内の次の行の開始タイムスタンプとしてソースから取得されるが、行が最新の情報を表す際にはnullであり得る。
【0051】
2つのCDWタイムスタンプは実際のロード時間(トランザクション時間)を反映するが、所与のテーブルの所与のミニバッチ実行のために標準化されてもよい。例えば、CDWタイムスタンプは所与のテーブルの所与のミニバッチ実行にロードされたすべての行を容易に識別できるように固定値としてのロードおよび設定の直前に取得されてもよい。CDCシステムはまた各テーブルがロードされた後に統計情報を収集し最新の内容にする(pre_CDC内のW_table、ALL_VTが無効になっている場合のステップ104の一部としてのX_table、またはステップ112の最後の繰り返しの終わりに)。変更データキャプチャシステムはまた、別々に呼び出されない場合、機能要件毎に受動的な主キーの一意性および外部キーの整合性チェックを呼び出すことができる。
【0052】
CDCシステムでは、暗示的親−子(parent−to−child)削除はプロセスフローが収容されるように示すためにプレースホルダとして実装されてもよい。複雑なステージ変換および混合モデルの公開(例えば、1つのテーブルのプッシュおよびスナップショット)で必要とされる変化は対処されない。注意されるように、任意の明示的および任意の複合暗示的削除はソースシステム特定の変換コードによりCDCの開始前にX_tableにロードされてもよい。CDCシステムは削除レコードを同じバッチ内であっても復元または「再生」させることができる。ソースの開始タイムスタンプが削除の唯一のインデックスとなる前のレコードのソース終了タイムスタンプよりも大きいまたは等しいことに注意する際、そのような状態が検出されてもよい。
【0053】
例示的な実施形態では、非コアの新しい行カウントは非コアの古い行カウント+I+O+Uカウントに等しい。システムはアップデートをカウント(OおよびUは別々に追跡されてもよい)し、終了タイムスタンプがnullでないX_tableにおけるOおよびUのカウントに対してこれらのカウントを検証してもよい。
【0054】
コードジェネレータにより生成された事前生成クエリは異なる層(例えば、非コア、コア、および派生)の潜在的な重複するテーブル名を防ぐためにデータ層に関連する条件を含んでいてもよい。例示的な実施形態では、指定されたCDWおよびSOURCEタイムスタンプではないタイムスタンプ列はタイムゾーンおよび6桁の精度を含む。これらの要件のいずれかまたは両方がコードジェネレータへの適切な変更を省略されてもよい。
【0055】
データウェアハウスに入力データをロードするための例示的な方法は特定の処理ステップまたは操作を参照して以下に説明される。独立したモジュールは、呼び出しが目標W_tableまたはX_tableに一度あることと、メタデータの設定毎にパーティションロードステップ(図4に示される)内で複数の繰り返しで並列に複数のパーティションを実行するオプションで、適用される前提条件に基づいて提供される。例えば、本明細書に説明されるステップ100から112は、入力データの中に相互依存性があるイベントでは、ソースシステムに関連するすべてのW_tableが処理の開始前に完全にロードされることを要求してもよい。しかしながら、CDCプロセス自体がそのような相互依存性を導入していない。
【0056】
例示的な実施形態では、各ステップはデータベースのパフォーマンスの低下の回避を可能にする、独立したSQLステートメントとして実行される。さらに、ステップ100から112が単一のデータベーストランザクションに含まれていなくてもよい。むしろ、例えば、各ステップまたはステップの複数のグループの各々は、個別のトランザクションで実行されてもよい。いくつかの実施形態では、ロードプロセス全体は任意のデータベースエラーが発生した場合には中止されるが、情報メッセージおよび/または警告メッセージの場合には継続してもよい。適用ステップ201−207は、任意のエラーに発行された明示的なロールバックとともに、複数の単一要求の単一データベーストランザクションとして実行されてもよい。すべてのCDCプロセスが所与のソースシステム用の新しいミニバッチ実行が開始される前に完了されてもよい。
【0057】
ステージおよび目標データベースのデータベース名は各CDW環境に合わせて適切にパラメータ化されてもよい。テーブル名は目標テーブル名に基づいてパラメータ化され、正しいデータベース名(W_、X_、および_Xテーブルはステージデータベース内にあり、目標テーブルは非コア、コア、または派生データベース内にあることができる)に割り当てられる。いくつかの例示テーブルはデータベースとして認定されていないことに注意されたい。例えば、W_およびX_はSTAGEであってもよいのに対し、目標は典型的にはNONCOREである。
【0058】
適切なロック修飾子は目標テーブルまたは共有型持続性ステージ上でロックの競合を最小限に抑えるためにCDCコードジェネレータにより追加される。例示的な実施形態では、ETLは適用フェーズをカプセル化するトランザクション中に目標データへのアクセスを制御しない。一般的なデータウェアハウスのアーキテクチャはアウトバウンドデータベースビューのための「LOCK FOR ACCESS」と同等な「ダーティリード(dirty read)」を含む。トランザクション内での上述の適用ステップの順序はこの問題を最小化するように設定される。代替の実施形態では、追加のSQLビューは必要に応じてトランザクションの待ちが完了するように定義される。
【0059】
例示的な実施形態では、CDCプロセスはETLコードに従って文書化され構成されたジョブに対応する、ソースシステムレベルで制御される同期ポイントで、目標テーブルレベルで制御される。ソースシステム内のすべてのテーブルのための適用ステップ(テーブル毎に1つのデータベーストランザクション)は新しいデータの一貫したビューを提供するために可能な限り並列化され、クエリ内で参照整合性の問題を最小限に抑えてもよい。いくつかの実施形態では、真の参照整合性がソース開始タイムスタンプが主キーの一部であることおよび親と子の間で変化するために従来の制約で強制されないことに留意すべきである。可能であれば、期間データ型の使用は一時的なPKおよび外部キー(FK)の制約が強制されることを可能にする。
【0060】
所望してもよい前提条件外部ロードプロセスをサポートするとともに例示的な変更データキャプチャプロセスを示すフローチャート70である図3を参照すると、明確な候補列が外部プロセス(例えば、CDCプロセス以外のプロセス)によりW_tableにステップ72で挿入される。例示的な実施形態では、すべての適格なソースシステムテーブルの行(例えば、メッセージまたはスナップショット)はテーブル特定の変換を使用してW_tableに書き込まれる。INSERT SELECT設定ロジックが使用されてもよい。ステップ72の一代替案では、候補行が1つの「バッチ」実行のCDCコードの開始点またはベースラインとともにW_tableに挿入され移入される。完全に重複した行はSELECTステートメント内のDISTINCTの使用で排除される。ステップ72で挿入した後、W_tableはソースにより保持され提供された場合履歴を含んでいてもよい、変換された入力データセットの完全で明確なスナップショットを包含する。メッセージベースのインターフェースについては、このステップは削除メッセージを除外してもよい。
【0061】
ステップ74で、明示的な削除は、以下でさらに説明されるステップ101を除いてまたはそれとの組み合わせで、ステージからX_tableに挿入される。ステージ/変換SQLコードはこのような場合にPK属性および「D」(削除)ETLインジケータをX_tableにロードする。1つの代替案では、X_tableはステップ74で明示的な削除を挿入する前にきれいにされる(例えば、空に)。別の代替案では、ステップ74は、両方の組み合わせが許容されてもよい場合の、LOAD_TYPE=Bのときを除いて、任意の明示的な削除を含まなくてもよい、スナップショットタイプのインターフェースのための省略された明示的な削除の挿入を含む。暗示的な削除が明示的な削除の代わりに使用される際には、ステップ74は省略されてもよい。
【0062】
ステップ76で、CDCプロセスはソーステーブルに関連付けられているロードジョブが完了するのを76で待つ。オプションのステップ78で、ロードジョブが完了すると、カスケード削除が実行される。いくつかのテーブルについては(例えば、従属子)、削除行がX_tableに書き込まれる。ソースシステムのための変換SQLプロセスはPK、親src_start_ts、「D」のETLインジケータ、および期限切れする行のソース開始タイムスタンプを直接ロードする。例示的な一実施形態では、ステップ78のカスケード削除は、子にカスケードして明示的に提供されない親の削除のためのソース変換に基づくCDCプロセスへのオプションの前提条件である。最新ではない目標行については、これらの削除は、以下でより詳細に説明する適用ステップ206で実行されてもよい。
【0063】
オプションのステップ80で、親−子暗示的削除が実行される。一代替案では、削除行はアップデートに応答して、1つまたは複数のテーブル(例えば、従属子)用のX_tableに書き込まれる。ソースシステムの変換SQLプロセスはPK、親src_start_ts、「D」のETLインジケータ、およびsrc_end_tsに格納されているこの子と一緒に送信されない前の親の行のソース開始タイムスタンプをロードする。別の実施形態では、設計はソースシステムインターフェース(例えば、継承する親TS)に基づいて変化する。ステップ80の1つの代替案で、親−子暗示的削除は以前のすべての子の削除を暗示する従属子行のアップデート用のソース変換に基づいたCDCプロセスへのオプションの前提条件である。一代替実施形態では、最新ではない目標行については、これらの削除は以下に開示する適用ステップ206に従って実行される。いくつかの実施形態では、ステップ72から82はCDCプロセスの予備的なものであり、本明細書に記述のプロセス内には含まれない。
【0064】
ステップ82で、CDCプロセスはソーステーブルに関連付けられているジョブが完了するのを待つ。これらのジョブが完了した際に、84で、データベースセッションが作成される。ステップ84はデータベースセッションに特定であるプロセスおよび/またはスレッドでデータベースセッションの作成を含んでいてもよく、1セッションで実行されるそのような操作は別のセッションで実行される操作には影響しない。
【0065】
ステップ86で、作成されたセッションの量はSESSION_PARALLELISMと比較される。セッションの量がSESSION_PARALLELISM未満である場合、ステップ84は別のデータベースセッションを作成するために再度実行される。そうでない場合は、ステップ88で、CDCプロセスはすべてのデータベースセッションが処理を完了するのを待つ。
【0066】
ステップ84で作成された各データベースセッションについては、CDCプロセスはステップ90で任意のパーティションがロードに利用可能であるかどうかを決定する。そうである場合、ステップ92で、パーティションロードが、図4を参照して以下で説明するように、ステップ84で作成された利用可能なデータベースセッションを使用して実行される。一実施形態では、ステップ92はX_tableなどのようなプリロードテーブルに入力データの1つのパーティションのインポートを実行するためにパーティションロードを提供する。
【0067】
いくつかの実施形態では、入力データは複数のパーティション(例えば、1より大きい値をNUM_PARTITIONSに設定することにより)に分割され、ステップ92は各パーティションに対して実行されてもよい。例えば、入力データはメタデータを使用してPKに関して明確におよび実質的に均等に(例えば、パーティションサイズの1%、5%、または10%の変動で)分割されてもよい。一例では、パーティションの量はユーザ提供パラメータ、NUM_PARTITIONSにより定義されてもよい。NUM_PARTITIONSを値1に設定することは、入力データセット全体を単一のパーティションとして扱われることに起因して入力データセットのパーティショニングを効果的に無効にしてもよい。
【0068】
NUM_PARTITIONS>1であるとき、複数のパーティションは個々のパーティションの実行の並列度の所望の程度を表す別のユーザ定義パラメータ、SESSION_PARALLELISMに基づいて並列にロードされてもよい。あるいは、パーティションは順次、すなわち連続してロードされてもよい。例えば、1に等しいSESSION_PARALLELISMを設定することは結果としてパーティションの逐次処理となってもよい。
【0069】
ステップ90で、CDCプロセスがデータベースセッションでインポートするために利用できるパーティションがないと判断した際には、セッションは処理を完了し、CDCプロセスがすべてのデータベースセッションが完了するのを待つステップ88に実行が継続する。
【0070】
ステップ94で、すべてのパーティションロードが完了した後、図6を参照して説明したように、すべてのロードされたデータが1つのデータベースセッションに適用される。例示的な一実施例では、NUM_PARTITIONSは5に設定され、SESSION_PARALLELISMは3に設定される。ステップ84は3つのデータベースセッションを作成するために3回実行される。第1のセッションは第1のパーティションのロードを実行するためにステップ92を実行し、第2のセッションは第2のパーティションのロードを実行するためにステップ92を実行し、第3のセッションは第3のパーティションのロードを実行するためにステップ92を実行する。この例でパーティションのサイズが実質的に同様であると仮定すると、第1のデータベースセッションはステップ92(最初のパーティションに対する)を完了し、それ以上のパーティション(すなわち、第4および第5のパーティション)がロードに使用可能であることを決定する、ステップ90を実行する。第1のデータベースセッションは第4のパーティションのロードを実行するためにステップ92を実行する。第2のデータベースセッションはステップ92(第2パーティションに対する)を完了し、パーティション(すなわち、第5のパーティション)がロードに利用可能であることを決定する、ステップ90を実行する。第2のデータベースセッションは第5のパーティションのロードを実行するためにステップ92を実行する。第3のデータベースセッションはステップ92(第3のパーティションに対する)を完了し、ロードに利用可能なパーティションがないことを決定するステップ90を実行し、ステップ88に進みすべてのセッションが完了するのを待つ。同様に、第1および第2のデータベースセッションの両方はステップ92(それぞれ、第4および第5のパーティションに対する)を完了し、ロードに利用可能なパーティションがないことを決定するステップ90を実行し、ステップ88に進みすべてのセッションが完了するのを待つ。すべてのデータベースセッションの完了とともに、CDCプロセスはステップ94に進み1つのデータベースセッション内でロードされたパーティションを適用する。
【0071】
図4は、例示的なパーティションロードプロセスを示すフローチャート98である。例示的な実施形態では、フローチャート98で示すプロセスは、順次および/または並列に、NUM_PARTITIONSパーティションの各々について実行される。以下に説明するステップは、表4に示すように、1つ以上のメタデータパラメータに依存してもよい。
【0072】
【表4】
【0073】
例示的な実施形態では、表4の文字の値(例えば、「Y」または「S」)は、メタデータパラメータが文字の値に等しい場合にのみそのステップが実行されることを示す。パイプ記号(「|」)はメタデータパラメータがリストされている文字の値のいずれかに等しいときステップが実行されるケースでの、文字の値の間の選言的(「or」)の関係を示す。さらに、「n/a」はメタデータパラメータがプロセスステップには適用されないことを示す。このような場合には、ステップはメタデータパラメータの値に関係なく実行されてもよい。
【0074】
ステップ100で、目標パーティションのロードはALL_VT=YおよびNUM_PARTITIONS>1のときスナップショットロード(例えば、LOAD_TYPE=SまたはB)に対して実行される。要約すると、ステップ100は、別々の揮発性のテーブル内にテーブルの明確な論理パーティションを作成するためのコストがプロセッサ使用率および/またはこのステップを追加するコストよりも多くの実行経過時間を低減する、大きなテーブルに対して呼び出される。一実施形態では、ステップ100はステップ101と同一の条件下で呼び出されてもよい。
【0075】
ステップ100および101で、論理パーティションは、例示的な実施形態でソース開始タイムスタンプを除いて主キー列に基づいて1および100万の間の整数を生成する、HASHBUCKET(HASHROW())関数を使用して作成される。これは相対的に均一なパーティショニング(例えば、同様なサイズのパーティション)を提供し、別個のパーティションにデータ行を決定論的に割り当てる低コストな(例えば、コンピューティングリソースの点で)方法である。MOD(モジュラス)関数は、CURRENT_PARTITIONのためのメタデータ値である残余として1からNで、メタデータパラメータNUM_PARTITIONSに対して使用される。コードジェネレータはステップ100および101のためにSQLでこれらの値をインスタンス化し、CDW_CDC_PARM内のテーブルパラメータに基づいてCDW_CDC_SQLテーブル内の検索のためにそれらを適切に格納する。
【0076】
ステップ100
例示的な実施形態では、ステップ100は、N(いいえ)の典型的な値で、TVT_FILTER_HISTORYと呼ばれる履歴フィルタリングパラメータを使用する。TVT_FILTER_HISTORYがYに等しい場合、CDCシステムはW_tableの入力データに基づいてCDCの実行中に必要のない目標テーブル内のより古い履歴行を取り除く。各W_table PKのための最先のタイムスタンプは、パーティションを切られた揮発性テーブル上のフィルタとして機能する、目標テーブルの主キーのセットを構築するために問い合わせおよび比較される。派生テーブルはパーティションフィルタを適用するW_table内の主キー毎のより古いソースタイムスタンプのWITH句を使用して構築される。これは次にすべてのより古い履歴を除外する対象テーブルから必要な主キーの別個のセットを作成するために使用される。
【0077】
一実施形態では、セットは、既に含まれていない場合は、ステップ102で適切な暗示的削除処理を保証するために、最先のW_table行よりも新しい行、最先のW_table行の前の行、および最新の行を含む。一代替案では、パーティション表現はそれぞれのケースに適合する。加えて、LOAD_TYPE=Bは、さらにクエリ条件を別のクエリ条件を介して明示的な削除行の主キーに一致する目標テーブルから行を提供するために追加されるという点では、このオプションの動作に影響を与えてもよい。
【0078】
別の例示的な実施形態では、TVT_FILTER_HISTORYは有効になっており、結果としてステップ104のような後ステップにおけるより低いコンピューティングリソースの使用率となる。この実施形態を続けると、TVT_FILTER_HISTORYは相対的に大きく(例えば、数百万行を含む)履歴行の相対的に大きな割合(例えば、テーブルの内容の75%以上)を有するテーブルのリソース使用率を低減するのに有効であってもよい。
【0079】
ALL_VTを有効にする1つの利点は、指定された1つまたは複数の列でハッシュアルゴリズムの実装を通して超並列処理(MPP)データベースシステム上でデータを配信する方法である、主インデックス(PI)としてPK_Latestの使用をもたらすことである。有利なことに、このオプションはPIがPKよりもはるかに少ない列を有するテーブル内よりもPK_Latestがよりスキューが少ないように具える。加えて、ALL_VTが有効になっている場合、システムはベーステーブルビュー内にフィルタを有するリスクを避けるために、アクセスロッキング修飾子をベーステーブルから読み出す。改善された効率は明示的な列名の一覧を記載するベーステーブルからワンステップ読み取りで揮発性テーブル(VT)を作成することにより達成されてもよい。これはアクセスビューから作成するのとは異なり、列が「nullでない」属性を保持するようにさせる。一代替案では、NUM_PARTITIONS=1であるとき、ハッシュパーティションはコンピューティングリソースを浪費しないようにこのステップでバイパスされる。例えば、NUM_PARTITIONSは、相対的に小さなパーティション内のデータの処理に関連付けられたコンピューティングリソースの減少により相殺されるようにパーティショニングに関連付けられたコンピューティングコストにはその他の点で十分に大きくはないスキューのあるテーブルのために1に設定されてもよい。
【0080】
ステップ101
例示的な実施形態では、ALL_VT=YおよびNUM_PARTITIONS>1であるとき、ステップ101はスナップショットをロードするために実行される(例えば、LOAD_TYPE=SまたはB)。換言すると、このステップは、別々の揮発性テーブルのテーブルの別個の論理パーティションを作成するコストがこのステップを追加するコストよりもプロセッサの使用率および/または経過実行時間を低減するために大規模なテーブル用に呼び出されてもよい。一代替案では、ステップ101はステップ100と同一の条件下で呼び出され、必要に応じて論理パーティションを別々におよび並列セッションで処理することができるように、Wテーブル、Xテーブルおよび目標テーブル用の揮発性テーブルを構築するプロセスを完了する。
【0081】
論理パーティションは、例示的な実施形態ではソース開始タイムスタンプを除く主キー列に基づいて1および100万の間の整数を生成するHASHBUCKET(HASHROW())関数を使用して作成される。これは相対的に均一なパーティショニング(例えば、同様なサイズのパーティション)を提供し、別個のパーティションにデータ行を決定論的に割り当てる低コストな(例えば、コンピューティングリソースの点で)方法である。MOD(モジュラス)関数は、CURRENT_PARTITIONのためのメタデータ値である残余として1からNで、メタデータパラメータNUM_PARTITIONSに対して使用される。コードジェネレータはこのステップおよびステップ100のためにSQLでこれらの値をインスタンス化し、CDW_CDC_PARM内のテーブルパラメータに基づいてCDW_CDC_SQLテーブル内の検索のためにそれらを適切に格納する。
【0082】
X_tableの空の揮発性コピーが作成される。LOAD_TYPE=Bについては、第3のSQLステートメントは現在のハッシュパーティションに一致するX_tableから明示的な削除行(例えば、ETL_INDICATOR=「D」)を挿入するために実行されてもよい。他の行は、その他の点でLOAD_TYPE=「S」についてCDCの開始時に完全に空であるかまたはLOAD_TYPE=「B」について明示的な削除で移入されるこのようなケースを除いてX_tableから読み込まれない。
【0083】
ステップ102
[0001]例示的な実施形態では、ステップ102はスナップショットロードを実行し(例えば、LOAD_TYPE=SまたはB)、ロードタイプSおよびBの間には、ステップ102でコードの差はなくてもよい。換言すれば、暗示的削除のためのX_table行の構築は、ソースデータの完全なスナップショットが使用可能であり、その存在のために親テーブルに依存していないテーブル用であるときには、呼び出されてもよい。これらの後のケースは親―子暗示的削除である。いくつかの実施形態では、ステップ102は、変更された行のみをロードするための行修正タイムスタンプを使用するなどのような、スナップショットインターフェースへの代替手段が実用的でないときに使用される。
【0084】
[0002]一実施形態では、ステップ102は暗示的削除ステップを含む。削除は非コアでアクティブ行であり(終了タイムスタンプがnullである)、もう入力スナップショットではなくなっている最新の主キー(PK_latest)を検出することにより決定され、このように最後のデータフィード以来ソースシステム内で削除されたと推定される。一実施形態では、現在のデータベースのタイムスタンプは適用ステップ(例えば、適用ステップ202)で使用するためにSRC_START_TSに挿入される。例えば、単一の適用ステップは現在のデータベースのタイムスタンプを使用して暗示的および明示的な削除を実行してもよい。このタイムスタンプは目標テーブル内の終了タイムスタンプになる。ソースシステムからのトリガまたは削除時間がないので、現在のタイムスタンプはソースシステム内での推定削除時刻として使用される。
【0085】
ステップ103
[0003]例示的な実施形態では、ステップ103はNORMALIZE_LATEST=Yであるとき、ロードタイプSおよびBの間でコードの違いなしでスナップショットロード(例えば、LOAD_TYPE=SまたはB)に対して実行される。このステップは、例えばテーブルが新しいコンテンツなしに新しい行のかなりの量を有するときに呼び出されてもよい。特に、このステップは目標テーブルの最新のアクティブな行よりも新しいSOURCE_START_TSで主キー毎に次の連続した行のみを排除し、他のすべての非キー属性は同じである。例えば、ステップ103はW_table行の大部分が新しいタイムスタンプで新しい属性なしで現在の目標テーブルの行を表すところで有効であってもよい。
【0086】
[0004]ステップ103の追加は結果として変更を識別し、より複雑なフルシーケンスと比較から行を除外するためにステップ104でのみ順番に使用される、table_KVTと名称付けられた揮発性テーブルの中に変更されていない新しい行の主キーをロードするためにステップ104のみを使用するよりも低コストのプロセスになってもよい。完全な比較がステップ104で必要とされないように、このアプローチのコンピューティングリソースの節約は実質的であってもよい。
【0087】
ステップ104
[0005]例示的な実施形態では、ステップ104は、ソースタイムスタンプの最後の3桁以外の少なくとも1つの属性が異なるW_tableから、目標テーブル行(ALL_VT=Nのとき)またはVTに格納されたフィルタされた目標行(ALL_VT=Yのとき)から、候補行とともにX_tableをロードする。このような行は最初にETLインジケータ「I」としてコーディングされており、SOURCE START TSは必要に応じて一意に1マイクロ秒でシーケンスされる。このプロセスは、エラー中で以前に論理的に削除された最新レコードの再活性化などのような、目標テーブル内への非キー属性の変更のアップデートを(source start TSへの対応する1ミリ秒追加で)することを可能にする。これは、個別の入力データセットの行がロードされることのみを保証するために有効な時間で一意性違反を解決する。
【0088】
[0006]例えば、ジョブの失敗はジョブの再実行の必要性に繋がる筈であり、ソース開始タイムスタンプではなくW_table内の列をアップデートし、変更データキャプチャシステムは新しい非キー属性を検出し一意であるシーケンスされたソース開始タイムスタンプとともに新しい行を非コアに挿入する。いずれにしても、所与の主キーの任意の新しいソース開始タイムスタンプはまた、結果として入力および既存のデータの両方を考慮する、その主キーの直前の行とは異なる非キー属性を提供した新しい行となる。
【0089】
[0007]いくつかの実施形態では、ステップ104のタイムスタンプの再シーケンス部(例えば、ソースシステムがソース開始タイムスタンプを除いた一意のビジネスキーを保証している場合)は省略される。最小時間増分、例えば1マイクロ秒は、row_number()関数の等価物のような、PK内の順序付け機能に依存する、さらにシーケンシングを行わない同一の主キーを有する後続行のソース開始タイムスタンプに追加される。
【0090】
[0008]タイムスタンプの再シーケンスは、アップデート処理が一対一での行の割り当てを保証されるように、最初に一意の主キーを(タイムスタンプで)保証するために利用される。再シーケンスされた行の一部は、明確な非キー属性を有していないためにその後削除されてもよい(ステップ107を参照)。保持された最古のそのような行で、これは導入されている新しいシーケンシングの可能性を最小限に抑える(例えば、最古の行には追加された時間がない)。X_tableが揮発性テーブルではないとき(例えば、ALL_VTが無効になっている)ステップ104のX_tableでの統計情報の収集または最新の内容にすることは最適なロードパフォーマンスの実現を容易にする。
【0091】
[0009]例示的な実施形態では、ステップ104の動作は最適化オプションに基づいて異なる。例えば、ALL_VTが有効になっているとき、ステップ104は従来のまたは永続的テーブルではなく揮発性テーブルに対して受信および動作してもよい。さらに、NORMALIZE_LATEST=Yであるとき、追加のサブクエリは前述したように、ステップ103で移入された_KVT揮発性テーブルから行を除外するためにSQLステートメントの最後に追加される。これはそのステップで検出された新しいけれども変更されていない行のはるかに大きいセットのコスト高な自己結合を回避する。NORMALIZE_LATESTはALL_VTと併せて有効にされてもよい。
【0092】
ステップ105
[0010]例示的な実施形態では、ステップ105はX_tableが前のステップで候補挿入行がロードされた後で実行される。それ故選択クエリは現在の実行に関与する主キーのセットを決定するためにW_table内の入力行およびX_table内の削除行を統合する必要はない。このアプローチは結果として、特にスナップショットロードのケースでは、入力W_table行がロードされる前に除去される際に揮発性の比較的小さなテーブルとなってもよい。
【0093】
[0011]ステップ104と同様に、ステップ105はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れるおよび動作してもよい。さらにALL_VTオプションは結果の揮発性テーブルの主インデックスに影響してもよい。ALL_VT=Nであるとき、W_tableおよびX_table主インデックスに一致する主インデックスが使用されてもよい。逆に、ALL_VT=Yであるとき、使用される主インデックスは他の3つの揮発性テーブルに一致するように、SOURCE_START_TSを除く主キーであってもよい。
【0094】
[0012]ステップ105は、一時的テーブルに格納される目標テーブル行の限定されたサブセットを使用することにより、ステップ106−110で実行される解析のコストを低減する実質的なパフォーマンスの最適化、特にステップ107の一時的な正規化を容易にしてもよい。改善は新しい候補行のみをW_table内に送るプッシュインターフェース用に宣言されてもよくおよび/または広範な履歴が目標テーブル内に存在する際であってもよい。2つの範囲の性能向上も可能であってもよい。先ず、CDCシステムはW_tableおよびX_tableに含まれる主キー(ソース開始タイムスタンプを除く)に対して目標テーブル行のみを考慮してもよい。ネット変更またはプッシュインターフェースについては、より頻繁なロード、より効率的なこのステップは、解析ステップのコストを低減することであってもよい。結合データボリュームの量は、少なくとも100の因子で減少されてもよい(例えば、提示ロード主キー毎に1%)。
【0095】
[0013]次に、CDCシステムは、最古の入力W_tableおよびX_tableソース開始タイムスタンプおよびすべての後続行の前で、もしあれば、目標テーブルから行へのこのようなPK行の期間を制限してもよい。換言すれば、CDCシステムは、各PKための最新のW_tableまたはX_tableへの前の行よりも以前の行を除いて、解析ステップで不要な過去の行を無視してもよい。いくつかのより新しい中間目標行もまた必要とされなくてもよいので、この最適化は行の最小数を決定しなくてもよい。入力行の直前または以降の行のみが一時的シーケンスのために必要である。一時的フィルタリングへのこのアプローチは比較的低いコンピューティングコストで実質的な利益を提供することが期待される。履歴の再ステートメントは一般的にまれである。それ故、新しい入力データはすべての以前に格納されたデータよりも典型的に新しいものである。それ故、このステップは上記の最初のパフォーマンス改善範囲で選択したPK毎に最新の現在行のみを典型的に読み取る。
【0096】
[0014]ステップ105は各実行または関与するDBMSに適用可能な任意の形式の一時テーブルでクリアされる永続的なテーブルを移入してもよい。一般性を失うことなく、揮発性一時テーブルはユーザアカウントのスプール(関与する結合をサポートするのに既に大きい)から割り当てられたスペースで選択される。テーブルはデータベースカタログへの影響やテーブルの作成権限を必要とすることなく、目標テーブルに対するselectステートメントの出力で自動的に定義され具現化される。
【0097】
[0015]いくつかの実施形態では、CDCシステムはNUM_PARTITIONS=1である(パーティショニングを行わない)ときには、ステップ100の任意の後続の実行(例えば、次のCDC実行)が揮発性テーブルおよびその内容が破壊されそれ故にcreate tableコマンドがエラーなしで許可されていることを保証するであろう、別々のデータベースセッションを使用していることを前提としている。パーティショニングを使用する時(例えば、NUM_PARTITIONS>1)、ステップ111は、以下に説明するように、単一のセッションで繰り返し反復を許可するためにこのテーブルをドロップする。
【0098】
ステップ106
[0016]例示的な実施形態では、ステップ106のシーケンスは挿入候補(例えば、削除を除く)についてX_tableおよび非コア間の完全な主キーを複製する。いくつかの実施形態では、X_table内でのシーケンシングはステップ104により実行されてもよい。ステップ106はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れおよび動作をしてもよい。
【0099】
[0017]6つのサブ秒のタイムスタンプの数字の使用されていない最後の3桁の数字に他の方法で含まれる最大のシーケンスよりも1つ大きくして始まる値を追加することにより、CDCシステムは主キーが既存および将来のデータ行の両方に渡って一意でありシーケンスされていることを保証する。より新しいミニバッチロードは新しいタイムスタンプを毎回受信し、タイムスタンプの重要な部分が一意である場合、潜在的に最新のレコードを表している。
【0100】
[0018]ステップ106はステップ107およびそれ以降の前提条件であってもよく、重複する主キーを有するデータレコードが新しいコンテンツを有している場合一意なタイムスタンプにシーケンスされるであろうから、主キー等価性ケースを排除してもよい。削除レコードは除外される。加えて、タイムスタンプの「幹」(例えば、すべてであるが、最後の3つのシーケンスされた桁)はシーケンスされる唯一のタイムスタンプによってのみ区別される複数の主キーの値を許可するための後続する「グループ単位での」操作のために使用されてもよい。
【0101】
ステップ107
[0019]例示的な実施形態では、ステップ107はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れおよび動作をしてもよい。ステップ107は、主キー内のソース開始タイムスタンプでソートする直前の行と比較される際、ソース開始タイムスタンプ以外の新しいキーまたは非キー属性を含まない候補W_table行を削除する。このステップは一般的に一時的正規化と呼ばれるプロセスの圧縮ユニットを表す。
【0102】
[0020]コンピューティングリソースは同じデータを含む行が複数回ロードされた際に浪費されてもよい。したがって、ステップ104は一時的な期間の圧縮ユニットを実装する。しかしながら、それはまだデータが「A」から「B」、次に「A」に戻る任意の変更を記録するために所望されてもよい。したがって、開始タイムスタンプを除く各個別行の最初のインスタンスはX_table内で維持される。より具体的には、PK_latestが同じ場合、およびX_tableおよび非コアテーブルのユニオン内で、PK_Latest内のソース開始タイムスタンプによりソートされた際にタイムスタンプを除くすべての列が前の行と同じである場合にX_table内のデータが削除される。
【0103】
[0021]いくつかの実施形態では、ALL_VTを有効にすることは、、特に入力行の数が限定され(例えば、頻繁なロードでのプッシュインターフェース)広範な履歴(例えば、一部改定を含む)での目標テーブルのケースでは、ステップ107でのコンピューティングリソースの使用率を実質的に減少してもよい。この意図的な製品の結合の改善は桁違いに達する可能性があってもよい。例えば、プロセッサの使用率および/またはメモリ使用率を低減してもよい。さらに、コンピューティングリソースの利用率向上の結果、ステップ107の経過時間もまた短縮されてもよい。
【0104】
[0022]2つ以上の同一の連続した行のケースでは(例えば、PKおよび属性の両方が同一)、CDCシステムは、最新の行が現在の最新の有効期限切れの目標行の終了後に開始するおよび以前の候補行が最新の目標行の期間内に開始する際にすべてが冗長として削除されないことを保証してもよい。この状況は、例えば、ソースシステムが論理的に時間のためのデータを削除し、次にデータをより新しいタイムスタンプなしで復元する際に、発生してもよい「再活性化」ケースと呼ばれてもよい。期限切れ行の最後のタイムスタンプに1ミリ秒を追加することは、CDCシステムが前の行に一致し、最小の一時的粒度を提供する、すべての他の属性で新しい行を開始することを可能にする。具体的には、追加の結合(テーブルCというエイリアス)は論理的に削除される場合であっても、最新のソース開始タイムスタンプを見つけるためオンライン分析処理(OLAP)クエリを使用してステップ107に含まれていてもよく、最新のX_table行と比較するために開始日付(または、このような行が存在しない場合は年2500)および終了日付を戻してもよい。SQLステートメントに追加されるロジックは、次の最新行(B.)がXテーブルにあるが最新Cテーブルの目標行の期間に含まれており、このようにB行がこのステップで削除されるであろう場合、最新X_table行(A.)をドロップすることを防いでもよい。例示的な実施形態では、C.結合の余分な計算コストは最小である。
【0105】
[0023]コンピュータデータウェアハウスは開始−終了タイムスタンプの範囲または期間として一時的な有効性を格納するので、同一の入力行がまだ有効であり提供された新しい情報ではなくそれが非コアの最新行であることを知る。同様に、W_table内の2つの同一の行は連続ではあるが別の開始時刻を有することを知ることもまた新しい情報ではなく、一度終了タイムスタンプが入力データのケースに割り当てられると最先行の開始時刻は開始および終了タイムスタンプ間の期間で既にこのコンテンツをキャプチャしている。例示的な実施形態では、ステップ107は履歴的なアップデートに対応しX_table内で連続した重複を除去する。ステップ107に関連付けられているSQLステートメントは、テーブルが多くの列を有する場合、特に比較のいずれかの側でnull値をチェックする必要性で、相対的に大きくなってもよい。1つの一般的に利用されるシステムがステートメント毎に1メガバイト(1MB)の制限を含む一方で、他のツールは低減された複雑さまたはサイズの実行単位内への非キー属性比較を分解するために複数のステップを必要としてもよいより小さいサイズの制限を課してもよい。オプション列のすべて(一般的にすべての非PKの)を比較する場合にNull保護が合体機能を介して提供される。row_number関数の使用は、ステップ106により保証されるX_tableおよび非コアの間で明確なsource start TSに依存する。
【0106】
ステップ108
[0024]例示的な実施形態では、ステップ108はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れおよび動作をしてもよい。ステップ108はこのケースでは新しいアップデートのための「I」から「U」である候補挿入行(「I」)の抽出、変換、ロード(ETL)インジケータをアップデートする2つのステップの最初のものである。ここで使用されるように、用語「より新しい」は削除済みとしてフラグが付けられていても、非コアの同じPK_latest内の最新行の主キーよりももっと後のソース開始タイムスタンプを含む、主キーを有するデータレコードを意味する。このステップは、各々が新しいコンテンツを表しステップ107で削除されていないことを提供される、主キー内の複数のX_table行のETLインジケータをアップデートすることができる。例示的な実施形態では、最新のアクティブな非コア行の終了タイムスタンプのみは最新の非コア行の終了タイムスタンプとしてその開始タイムスタンプを適用するためのPK毎の最先の「U」行のみを探し出す適用フェーズ(例えば、以下の適用ステップ202)でアップデートされる。後述するステップ110は、すべてであるが最新の行が目標の事前期限切れ内に挿入されることを反映するために、X_table内のPK毎の「U」に設定される複数の行がある際には終了タイムスタンプを提供してもよい。
【0107】
ステップ109
[0025]例示的な実施形態では、ステップ109はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れおよび動作をしてもよい。ステップ109は新しい履歴行がコンピュータデータウェアハウスに追加されることを可能にする。このステップは、このケースでは「より古い」データのアップデートのための「I」または「U」から「O」である、候補挿入行(「I」または「U」)用のETLインジケータをアップデートする2つのステップの2番目である。「Ο」:1のETLインジケータでの「古い」アップデートには2つのケースがある。ソース開始タイムスタンプは、削除済みとしてフラグが付けられていても、シーケンスアップデート外および2と呼ばれる、同じPK_latest内で最新の非コア行の前にある。開始タイムスタンプは非コアのPK_latest内の任意の行よりも新しいが、開始タイムスタンプはまた非コアの最新終了タイムスタンプよりも小さいので、ケース1は適合しない。換言すると、この行はより新しいアップデートであるが、非コア内で既にもっと後の有効期限切れ日付により既に論理的に削除され期限切れの一回入力としてマークされるであろう。定義により、この行はその開始タイムスタンプが最新の非コア開始タイムスタンプよりも新しいため、最新の行の削除ではなく既に「U」としてフラグが付けられている。
【0108】
ステップ110
[0026]例示的な実施形態では、ステップ110はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れおよび動作をしてもよい。ステップ110は、すべてであるが最新の行が非コア事前期限切れ内に挿入されるであろうことを反映するX_table内の主キー毎に「U」に設定される複数の行がある場合終了タイムスタンプを提供する。ステップ110は、非コア内の最新の行になることを予定されていないすべての事前期限切れの新しい行の終了タイムスタンプを設定する。ETLインジケータ「O」でのすべての行は終了タイムスタンプを必要とし、X_tableおよび非コア内で最新ではないETLインジケータ「U」でのこれら行のみはまた次行の開始タイムスタンプに等しい終了タイムスタンプを取得するであろう。「O」行は定義により適用フェーズ(例えば、後述の適用ステップ204)内で、それらの終了タイムスタンプをその後の非コア行から取得する。このステップはユニオンまたは例外演算子を使用することにより単一のSQLステートメントで達成されることができる。
【0109】
ステップ111
[0027]例示的な実施形態では、ステップ111はALL_VTが有効になっているときに揮発性テーブル名に対して受け入れおよび動作をしてもよい。ステップ111は、行の正確な開始タイムスタンプがX_table内ですべての削除行(「D」ETLインジケータ)のために論理的に削除されるように設定しこの値をその行のsrc_end_ts列内に格納する。これは、削除が適用されるであろう非コアおよびXテーブル行から前の行を見つけることにより、有効期限が切れるように単一の非コア行を配置するための適用フェーズ(例えば、後述のステップ206)の正確な完全主キーを提供する。最新行および他の事前期限切れX_table行はアップデートされてもよいが、このアップデートは必須ではなく、他のステップがこれらの行を期限切れとしてもよい。削除行のソース終了タイムスタンプは有効期限が切れるように行のソース開始タイムスタンプであり、そのとき点で存在していた行の終了タイムスタンプになる。例示的な実施形態では、ステップ111は、事前CDCのステップ(例えば、図3に示すステップ92の前のステップ)が子のカスケードおよび暗示的削除を決定する際に参照整合性を維持する。ステップ111は、それにより親レコードがCDCを呼び出す前に正確なタイムスタンプを決定するために事前CDC処理を要することなくそれらに適用される対応する過去の削除を有することを確実に容易にする。
【0110】
ステップ112
[0028]例示的な実施形態では、ステップ112はLOAD_TYPE=S(スナップショットロード)またはB(明示的および暗示的削除両方でのスナップショットロード)およびALL_VT=Y(揮発性テーブルを使用)であるときのみ実行される。ステップ112は結果データを揮発性X_tableから、並列セッションがセッション特定の揮発性テーブルを使用するテーブルデータの一意のパーティションを処理することができる実際の(例えば、永続的または「物理的」)X_tableにロードする。
【0111】
[0029]LOAD_TYPE=Bであるとき、ステップ112は現在のパーティション用のX_table内に既にロードされた明示的な削除を最初に削除する。これらの明示的な削除はステップ101で_XVTテーブルにロードされ現在の実行中に処理される。これは最初にX_table内で重複行を防止し未処理の明示的な削除を除去するために行われてもよい。例えば、CDCはステップ100の間に目標テーブル内の一致するタイムスタンプをシーケンスおよび設定してもよい。
【0112】
[0030]図3に示すように、NUM_PARTITIONS>1であるとき、ステップ100から112は、1からNUM_PARTITIONSまでの各パーティションのために適用ステップを実行する前にステップ、パーティション、およびセッションに一致する事前生成されたSQLを使用して繰り返される(例えば、SESSION_PARALLELISMパラメータ毎に直列または並列で)。エラーが発生する場合には、フローチャート70(図3に示す)により示されたプロセスは停止されてもよい。いくつかの実施形態では、実際のX_table上の統計が最後のパーティションのロード(例えば、CURRENT_PARTITION=NUM_PARTITIONSである)に集計される。
【0113】
[0031]図5は、例示的なデータアプリケーションプロセスを示すフローチャート200である。例示的な実施形態では、以下に説明する適用ステップ201〜207は、各目標テーブル用に目標テーブル毎に1つの開始で単一のデータベーストランザクション内で一緒に実行される。ステップ201〜207のすべては単一のマルチステートメント要求にまとめ、エラーチェックを提供されることができ、行数アレイが適切に管理される。ステップが個別に提示されステップでエラーが発生している場合は、適用ステップ201〜207の実行が中止されてもよく、それ以上のSQLステートメントが提出されなくてもよい。このようなシナリオでは、トランザクション全体がキャンセルされる、または「ロールバックされる」。ソース変換要件に応じて、CDCプロセスは適用ステップ201〜207いずれかを開始する前に、ステップ100から112を通して完了するすべてのソーステーブルを待ってもよい。適用ステップは連続クエリアクセス中に目標データベースの参照整合性を最大化するためにすべてのテーブルに対して並列に実行されてもよい。
【0114】
適用ステップ201
[0032]例示的な実施形態では、適用ステップ201は、適用ステップ207、下記のEND TRANSACTIONステップまでのすべての後続のステップに関連付けられるSQLステートメントが完全に適用されるまたはエラーの場合にはSQLステートメント内のどこにもまったく適用されない、データベーストランザクションを開始する。これは、例えばその行が論理的に削除される限り、PK_latest毎に多くても1つのソース終了タイムスタンプで、多くても1つのアクティブな行で、有効な状態で目標テーブルをレンダリングするのを容易にする。
【0115】
適用ステップ202
[0033]適用ステップ202は、1つ以上のより新しい行の到達のせいで最新の非コアタイムスタンプを期限切れとさせるETLインジケータ「U」のために論理的に削除されたとして行をマークするために両方の終了タイムスタンプ(ソースおよびCDW)を設定するPK_latest毎の1つの最新アクティブ行(ソース終了タイムスタンプがnullである)をアップデートする。すべて削除またはインジケータ「D」の処理は適用ステップ206で発生する。ステップ202で適用される条件は、終了時刻になったX_tableソース開始タイムスタンプが少なくとも非コア開始時間(例えば、期間>0)と同じ大きさであることを含む。
【0116】
適用ステップ203
[0034]例示的な実施形態では、適用ステップ203は新しい行を非コアに挿入するための唯一の適用ステップである。削除を除くAll ETLインジケータは結果として新しい非コア行(I、OおよびU)となる。行は事前期限切れ(例えば、X_tableソース終了タイムスタンプ列が値を有するため)またはそうでなくてもよい。トランザクションまたはCDWタイムスタンプを割り当てることができる任意のステップのように、この値は、一定の開始CDWタイムスタンプもまた目標テーブル上でのCDCの呼び出しを一意に識別するように、典型的に適用ステップの前に決定されそれぞれに一貫して使用される、適用フェーズの現在のタイムスタンプを表す。
【0117】
適用ステップ204
[0035]適用ステップ204は、適用ステップ203(「O」行の1つのケース)で挿入された新しい行が最新のソース開始タイムスタンプを有しているが、そのタイムスタンプが既に非コア内の最新のソース終了タイムスタンプよりも前のときに、以前の非コア行の終了タイムスタンプを修正する。これは、既に期限切れの行が既存の期限切れタイムスタンプより少ない開始タイムスタンプでシーケンスアップデート外で受信することであり、「O」行の比較的まれなケースである。
【0118】
[0036]適用ステップ204のコンピューティングリソース使用率は、目標テーブルが完全に自分自身に結合されていること、テーブルが広範な履歴を有している際に潜在的に大規模なプロセッサの使用率および潜在的な追加スキューに関連付けられている操作を避けるため、X_table上の最新の主キーに対するサブ−クエリを含めることにより低減されてもよい。
【0119】
適用ステップ205
[0037]適用ステップ205はETLインジケータ「Ο」でマークされた行に対して呼び出される。ステップ205は、もしあれば、直前の非コア行を決定するために非コアテーブルにすべてのX_table「Ο」の行を結合し、CDW終了タイムスタンプをアップデートするのと同様に、次にこれらの行を終了タイムスタンプとしてX_table行の開始タイムスタンプでアップデートする。適用ステップ205はソースタイムスタンプ内の別個の非重複期間を提供するために、シーケンスの新しい行外用のソースタイムスタンプをラダーステッピングする処理を終了する。論理的に削除済みとしてマークされた任意の行を除き、ソース開始タイムスタンプはソース開始タイムスタンプにより主キーの残りの部分の中にソートされる際に直前の行(もしあれば)のソース終了タイムスタンプである。
【0120】
適用ステップ206
[0038]適用ステップ206はETLインジケータ「D」でマークされた行のために呼び出され、非コアまたはバッチに新たにロードされたものからの過去および現在の行の両方に適用する。このプロセスは、非コアの既存の終了タイムスタンプを削除行の開始タイムスタンプ(例えば、ETLインジケータ=「D」)にアップデートする。X_tableに直接挿入された行(例えば、親−子暗示的削除)については、行を構築するプリCDCプロセスは終了タイムスタンプがまだ開始タイムスタンプより大きく、後続行のソース開始タイムスタンプより小さいか等しくなるように保証する。
【0121】
[0039]一対一の結合を保証するために、非コアの目標行のソース開始タイムスタンプはX_table内のソース開始タイムスタンプが行の終了タイムスタンプになる目標テーブル内の削除イベントのソースタイムスタンプを記録するために既に使用されるので、X_tableでsrc_end_ts列に格納される。ステップ206で具現化されるこの最終条件は、最新の非コア行の論理的な削除に対応し、過去の削除が終了タイムスタンプをアップデートする際に新しい終了タイムスタンプが小さいことを保証するために対応する(例えば、PK_latest内の行に渡るソースタイムスタンプの開始および終了期間の重複のないことを保証ために、長くするのではなく行のみの寿命または期間を短縮してもよい)。
【0122】
適用ステップ207
[0040]最終的な適用ステップ207は、エラー発生なしで提供される、前の開始トランザクション以降のすべての以前のステートメントのトランザクション範囲を終了する、データベースのトランザクションを終了するためのSQLステートメントを提示する。既に行われていない場合、統計情報はこのとき点で目標テーブル上に収集されるまたは最新の内容にされてもよい。
【0123】
[0041]図6図23は、記述された変更データキャプチャシステムに関連付けられる各ステップをさらに説明するデータフロー図である。例えば、図6は、ステップ100での非コアデータ302からの入力データのパーティションのロードに関連するデータフロー図300である。揮発性テーブル304はハッシュ関数に従って非コアデータ302からのデータレコードの部分を選択することによりに作成306される。さらに、履歴フィルタリングが有効になっている場合(例えば、TVT_FILTER_HISTORY=Y)に、揮発性テーブル304を作成306することはW_table308内のデータに基づいて非コアデータ302からデータレコードを省略することを含んでいてもよい。加えて、履歴フィルタリングが有効になっておりLOAD_TYPE=Bであるとき、X_table310はステップ100への入力として使用されてもよい。
【0124】
[0042]以下は、TVT_FILTER_HISTORY=N、およびLOAD_TYPE=Sであるとき、ステップ100に関連付けられる擬似コードの例である。

ステップ100−擬似コード(TVT_FILTER_HISTORY=N、LOAD_TYPE=S):
Create volatile table_TVT as
Select * from target table
Where HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Primary Index PK Latest;
【0125】
以下は、TVT_FILTER_HISTORY=Y、およびLOAD_TYPE=Sであるとき、ステップ100に関連付けられる擬似コードの例である。

ステップ100−擬似コード(TVT_FILTER_HISTORY=Y、LOAD_TYPE=S):
WITH W table minimum primary key and src start TS where
HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Create volatile table_TVT as
Select * from target table
Where full primary key in(
Select newer rows in target table than derived W table with hash partition
Union
Select latest older row in target table relative to derived W table with hash partition
Union
Select latest row from target table)
Where HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Primary Index PK Latest;
【0126】
以下は、TVT_FILTER_HISTORY=Y、およびLOAD_TYPE=Bであるとき、ステップ100に関連付けられる擬似コードの例である。

ステップ100−擬似コード(TVT_FILTER_HISTORY=Y、LOAD_TYPE=B)。
WITH W table minimum primary key and src start TS where
HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Create volatile table_TVT as
Select * from target table
Where full primary key in(
Select newer rows in target table than derived W table with hash partition
Union
Select latest older row in target table relative to derived W table with hash partition
Union
Select latest row from target table)
Or PK_Latest in(select PK_Latest from X table where ETL_Indicator is D from hash partition)
Where HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Primary Index PK Latest;
【0127】
図7は、W_table322からの入力データのパーティションのローディングをする、ステップ101に関連するデータフロー図320である。揮発性テーブル_WVT324および_XVT326が作成328される。_WVTテーブル324はハッシュ関数に従ってW_table322からデータレコードの部分を選択することによりロードされる。LOAD_TYPE=Bであるとき、X_table330からの「D」行は揮発性テーブル_XVT326にロード332される。
【0128】
以下は、LOAD_TYPE=Sであるとき、ステップ101に関連付けられる擬似コードの例である。

ステップ101−擬似コード(LOAD_TYPE=S):
Create volatile table_WVT as
Select * from W table
Where HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Primary Index PK Latest;

Create volatile table_XVT as
X table with no data
Primary Index PK Latest;
【0129】
以下は、LOAD_TYPE=Bであるとき、ステップ101に関連付けられる擬似コードの例である。

ステップ101−擬似コード(LOAD_TYPE=B)。
Create volatile table_WVT as
Select * from W table
Where HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
Primary Index PK Latest;

Create volatile table_XVT as
X table with no data
Primary Index PK Latest;

Insert into_XVT(PK,4 row marking columns)
Select PK,4 row marking columns from X table
Where HASHBUCKET(HASHROW(PK Latest))MOD NUM_PARTITIONS=CURRENT_PARTITION
AND ETL_INDICATOR=‘D’
【0130】
図8は、暗示的削除用のX_table行の構築をする、ステップ102に関連するデータフロー図340である。図340は、非コアデータ342からの行がもはやW_table344に表示されない場合、それがソースから削除されたことを想定していることを示す。行は「現在の」非コア主キーがW_table344内にない非コアデータ342、現在のタイムスタンプ、およびETL_Indicator「D」から最新の主キー(PK_latest)でX_table348に挿入346される。これはテーブルが親に依存しない単純なケースである。
【0131】
以下は、ステップ102に関連付けられる擬似コードの例である。

ステップ102−擬似コード:
Insert into X_table
Select[*,Current_Timestamp,‘D’]from target
WHERE PK−Latest NOT IN
(Select[PK_Latest]from W−table);
【0132】
図9は、ステップ103に関連付けられるデータフロー図360である。W_table362内のデータレコードは変更されていないより新しい行の主キー366を識別するために非コアデータ内のデータレコード364と比較される。同一コンテンツでの最先の入力データ行のこれらの主キーは揮発性テーブル_KVT368に格納される。
【0133】
以下は、ステップ103に関連付けられる擬似コードの例である。

ステップ103−擬似コード:
Create VT of W table full PK’s to exclude in step 104
Select full PK from W table
Where full PK in(
Select earliest full PK row from W table joined to target table
Where target table is latest row and W table is next newest row
And all attributes of both rows are identical excluding source TS
【0134】
図10は、非別個の完全な主キーのシーケンスである、新しいおよび変更されたレコードのX_table行の構築をする、およびX_table382の統計情報の収集をする、ステップ104に関連するデータフロー図380である。少なくとも1つの列が新しいデータ履歴がX_tableにロードされることを可能にする非コアデータ386内のすべての他の行と異なる場合、行はX_table382に挿入384される。すべてのW_table388行がすべての非コア386の行をマイナスする(SQL except)のを選択することにより、デフォルトETLインジケータがIに設定される。変更データキャプチャシステム、および主キーの整合性は、データ内で保証される場合は常に必要とされなくてもよいそのようなステップを要求する。1マイクロ秒はPK_latest内のn番目の行の秒のためにW_table388内でsrc_start_tsタイムスタンプに追加される。同様に、任意のタイムスタンプシーケンシングのために予約されているソースタイムスタンプの最後の3つのサブ秒桁がW_tableおよびノンコア間の変化の比較から除外される。
【0135】
以下は、ステップ104に関連付けられる擬似コードの例である。

ステップ104−擬似コード:
Insert into X_table
Select[*]from W_table−−1 microsecond sequencing added to start TS
Where * not in(−−exclude microsecond sequencing when selecting start TS
Select[*]from target);−−exclude ns sequencing when selecting start TS
Collect statistics on X_table;
【0136】
さらに、NORMALIZE_LATEST=Yであるとき、上記のように_KVTテーブル390はステップ103で主キーを事前設定されてもよい。このようなシナリオでは、ステップ104は_KVTテーブル390に表示される主キーに関連付けられたデータレコードを除外する(例えば、X_table382内には挿入384しない)。
【0137】
図11は、ステップ105に関連付けられたデータフロー図400である。X_Table404に表示されるPK_Latestに関連付けられる非コアデータ402内のデータレコードは、非コアデータ402内のソース開始タイムスタンプに基づいてフィルタリングされ揮発性目標テーブル408に挿入406される。
【0138】
以下は、ステップ105に関連付けられる擬似コードの例である。

ステップ105−擬似コード:
Insert into Target_Table_VT(create volatile temporary table via select statement)
Select * from Target Table where
PK_Latest in(select PK_Latest from X_table)
And(SOURCE_START_TS>=MIN SRC_START_TS in X table for that exact PK
OR SOURCE_START_TS is MAX for PK<MIN SRC_START_TS in X)
【0139】
図12は、既存の非コア424行を順番にアップデートするであろうX_table422行の再シーケンシングをする、ステップ106に関連するデータフロー図420である。ステップ106の意図は同じPK内の別の同一の開始タイムスタンプ(最後の3つのサブ秒桁を除く)ですべてのX_table「I」行に最大の非コアスタンプ(TS_microseconds)を加えることにより、X_table422に関連付けられるソース開始タイムスタンプをアップデートすることである。既存の行と同じタイムスタンプ(TS)を有する、主キー(PK)のための新しい、シーケンスされた(ステップ104で)行426が受信された場合、新しい行が非コア行424の後にシーケンスに落ちることが保証される。
【0140】
以下は、ステップ106に関連付けられる擬似コードの例である。

ステップ106−擬似コード:
UPDATE X−alias
FROM X−table X−alias
,(SELECT
PK_Latest
,CAST(MAX(src_start_ts)as char(23))F23C
,substring(cast(max(source_start_ts)as char(26))from 24 for 3)+1 L3C
,substring(cast(source_start_ts as char(32)),from 27 for 6)+1 L3C
FROM target
GROUP BY PK_Latest,F23C,TSTZ)QQQ
SET SRC_START_TS
=F23C||SUBSTRING(CAST((L3C/1000+
(SUBSTRING(cast(xpm.src_start_ts as char(26))FROM 24 FOR 3))/1000)AS DEC(4,3))FROM
4 FOR 3)
WHERE X−alias.PK_Latest=QQQ.PK_Latest
AND CAST(X−alias.src_start_ts AS CHAR(23))=QQQ.F23C
AND X−alias.ETL_INDICATOR=‘I’;
【0141】
図13は、ユニオン、例えば、X_table442および非コアテーブル444および付加的にX_table446および非コアテーブル448のユニオン内で、連続した冗長X_table行のドロップを行う、ステップ107に関連付けられたデータフロー図440である。2つのユニオンは主キー上でシーケンス行に結合され、すべての非キー属性に関して複製され次に最新の目標テーブルPKに結合される連続した行の検出を可能にする。ステップ107は、同一のデータを含む行が複数回ロードされた際にリソースが浪費されるという認識を表し、一時的な期間の圧縮ユニットを実装する。しかしながら、データ内で「A」から「B」、次に「A」に戻る任意の変更を記録することがそれでもなお望ましい。したがって、開始タイムスタンプを除く各個別行の最初のインスタンスはX_table450に保持される。より具体的には、PK_latestが同じ場合、およびPK_Latest内、X_tableおよび非コアテーブルのユニオン内のソース開始タイムスタンプによりソートされた際にタイムスタンプを除くすべての列が前の行と同じ場合、X_table450内のデータは削除される。
【0142】
例示的な実施形態では、X_table452および非コアテーブル454の付加的な結合(テーブルCというエイリアス)は、論理的に削除され最新X_table行と比較するために開始日付(またはそのような行が存在しない場合には2500年)および終了日付を返す場合であっても、最新のソース開始タイムスタンプを見つけるために含まれる。
【0143】
以下は、ステップ107に関連付けられる擬似コードの例である。

ステップ107−擬似コード:
Delete from X_table where PK IN(
(Select PK from
(Select A.* from
(Select *,table_source,Row_Number()from X_table union noncore
partition by PK_Latest Order by SRC_START_TS to create Row_Number)A
INNER JOIN (Select *,table_source,Row_Number()from X_table union noncore
partition by PK_Latest Order by SRC_START_TS to create Row_Number)B
Where A.PK_Latest=B.PK_Latest
and B.Row_Number=A.Row_Number−1
and all non−key attribute are the same (values equal or both null)

AND A.Table Source=‘X’
Left Outer Join(Select PK_Latest,If not null then Source Start TS else Year 2500,
SOURCE_END_TS
From Target partition PK_Latest and present newest Source Start ts)C ON A.PK_Latest=C.PK_Latest
WHERE(B.Table Source=‘X’
AND A.Time period is newer than the latest target row
【0144】
図14は、非コアデータ464内の現在の行へのアップデートであるX_table462の行のマーキングをする、ステップ108に関連するデータフロー図460である。ステップ108では、X_tableをアップデート466するために、ETL_Indicatorは入力ソースタイムスタンプが非コアテーブル内の最新のソースタイムスタンプより大きい既存の非コア「現在」行をアップデートする「I」行上で「U」に設定される。本明細書に記述する適用ステップ202では、これらの 「U」行の最先の開始タイムスタンプは最新の非コア行を期限切れにするため主キー内で使用される。
【0145】
以下は、ステップ108に関連付けられる擬似コードの例である。

ステップ108−擬似コード:
UPDATE X_tbl
FROM X_TABLE X_tbl
,(select PK_Latest
,max(src_start_ts)src_start_ts
from target
group by PK_Latest)NC_tbl
SET ETL_INDICATOR=‘U’
WHERE X_tbl.PK_Latest=NC_tbl.PK_Latest
AND X_tbl.SRC_START_TS>NC_tbl.SRC_START_TS
AND X_tbl.ETL_INDICATOR=‘I’;
【0146】
図15は、非コアデータ484内の「過去」行へのアップデートであるX_table482内の行のマーキングをする、ステップ109を示すデータフロー図480である。フロー図480は、シーケンス外で適用されるアップデートに関する。ステップ109では、X_table482内のデータをアップデート486するために、ETL_Indicatorは既存の非コア「履歴」行のアップデートのためにIまたはUに以前設定した行で「O」に設定される。そのような行では、入力ソースタイムスタンプは、一度X_tableおよびノンコアテーブル行全体が考慮されると、非コア行内の最新のソース開始スタンプよりも小さい。これは、PK_Latest毎の全体的な最大値を達成するために非コアおよびX_tableの両方からのタイムスタンプの比較を組み合わせることにより達成される。あるいは、入力ソースタイムスタンプは最新のソース終了タイムスタンプよりも小さいので、したがって行が事前期限切れでなければならない。これらの「O」行は履歴的なシーケンスを修正するために非コアデータ内の終了タイムスタンプをアップデートする。これらのアップデートはタイムシーケンス外で適用されているので、ほとんどがステップ110内の次の行の終了タイムスタンプを取得する。その他は適用ステップ204の終了タイムスタンプを取得する。
【0147】
以下は、ステップ109に関連付けられている擬似コードの例である。

ステップ109−擬似コード:
UPDATE X_tbl
FROM X_TABLE X_tbl
,(select PK_Latest
,max(src_end_ts)max_end_ts
,max(src_start_ts)max_start_ts
from target
group by PK_Latest)Max_tbl
SET ETL_INDICATOR=‘O’
WHERE X_tbl.PK_Latest=Max_tbl.PK_Latest
AND ((X_tbl.SRC_START_TS<Max_tbl.MAX_EN D_TS
OR(X_tbl.SRC_START_TS<Max_tbl.MAX_START_TS))
AND X_tbl.ETL_INDICATOR IN(‘I’,‘U’);
【0148】
図16は、非コアまたはX_table内で既にアップデートされたX_table行(「O」または「U」)の期限切れをする、ステップ110を示すデータフロー図500である。X_table行の終了タイムスタンプは前の行の開始タイムスタンプ(非コアまたはX_table内のいずれか)に設定される。ETL_Indicatorが「O」に設定されている行はロードする履歴のアップデートを可能にする。これらは主キー内の最新の行ではない入力行であり、すなわち、それらはユニオン506を介してX_table502および非コア504に渡って既にアップデートされている。それらはそれらの終了タイムスタンプに基づいて履歴行として非コアデータ内に挿入される。
【0149】
以下は、ステップ110に関連付けられる擬似コードの例である。

ステップ110−擬似コード:
Update X−tbl
FROM X−table X−tbl
,(Select AAA.PK−Latest, min(BBB.START_TS)as END_TS
From (Select PK
From X−table)AAA,
(Select PK
From X−table
UNION
Select PK
From target)BBB
Where BBB.PK_Latest=AAA.PK_Latest
And BBB.START_TS>AAA.START_TS
Group By AAA.PK
)QQQ
SET END_TS=QQQ.END_TS
WHERE X−table.PK=QQQ.PK
and X−table.ETL_Indicator IN(‘O’,‘U’);
【0150】
図17は、論理的削除が適用する最新の非コア行のタイムスタンプを見つけることによりすべての削除行(「D」のETL_Indicator)用の完全キー(ソース開始タイムスタンプで)の提供をする、ステップ111を示すデータフロー図520である。より具体的には、終了タイムスタンプは削除タイムスタンプに基づいて直前のX_table行または非コア行の開始タイムスタンプにX_table行上で設定される。論理的に削除されるこれらの行は、既に用意された親−子に加えて変更データキャプチャの前の暗示的またはカスケード削除行である。このようなケースは適用ステップ206で実行される。
【0151】
以下は、ステップ111に関連付けられる擬似コードの例である。

ステップ111−擬似コード:
Update X−tbl
FROM X−table X−tbl
,(Select AAA.PK−Latest,min(BBB.START_TS)as END_TS
From(Select PK
From X−table)AAA,
(Select PK,Max Start TS
From X−table
UNION
Select PK,Max Start TS
From target)BBB
Where BBB.PK_Latest=AAA.PK_Latest
And BBB.START_TS>AAA.START_TS
Group By AAA.PK,BBB.Max Start TS
)QQQ
SET END_TS=QQQ.END_TS
WHERE X−table.PK=QQQ.PK and X−table.Start TS<QQQ.Start TS
and X−table.ETL_lndicator=‘D’;
【0152】
図18は、_XVTテーブル544からX_table546にデータレコードの挿入542をする、ステップ112を示すデータフロー図540である。データがX_Table546に挿入542された後、ステップ112はパーティション用に作成されたすべての揮発性テーブルをドロップ548することを含む。特定の場合(例えば、NORMALIZE_LATEST=N、およびLOAD_TYPE=Bであるとき)、ステップ112は現在のパーティションにある「D」のETLインジケータでX_table546内の行を削除550することを含んでいてもよい。
【0153】
以下は、NORMALIZE_LATEST=N、およびLOAD_TYPE=Sであるときにステップ112に関連付けられる擬似コードの例である。

ステップ112−擬似コード(NORMALIZE_LATEST=N、LOAD_TYPE=S):
INSERT INTO X−table SELECT * FROM_XVT;

DROP TABLE_XVT;
DROP TABLE_WVT;
DROP TABLE_TVT;
DROP TABLE_VT;

COLLECT STATISTICS X−table;(last partition only)
【0154】
以下は、NORMALIZE_LATEST=Y、およびLOAD_TYPE=Sであるときにステップ112に関連付けられる擬似コードの例である。

ステップ112−擬似コード(NORMALIZE_LATEST=Y、LOAD_TYPE=S):
INSERT INTO X−table SELECT * FROM_XVT;

DROP TABLE_XVT;
DROP TABLE_WVT;
DROP TABLE_TVT;
DROP TABLE_VT;
DROP TABLE_KVT

COLLECT STATISTICS X−table;(last partition only)
【0155】
以下は、NORMALIZE_LATEST=N、およびLOAD_TYPE=Bであるときにステップ112に関連付けられる擬似コードの例である。

ステップ112−擬似コード(NORMALIZE_LATEST=N、LOAD_TYPE=B)
DELETE FROM X−table
WHERE ETL_INDICATOR=‘D’
AND HASHBUCKET(HASHROW(USAGE_INSTANCE_NUM_ID))MOD NUM_PARTITIONS=0;
INSERT INTO X−table SELECT * FROM_XVT

DROP TABLE_XVT;
DROP TABLE_WVT;
DROP TABLE_TVT;
DROP TABLE_VT;

COLLECT STATISTICS X−table;(last partition only)
【0156】
最初の適用ステップ、ステップ201は適用ステップ207、END TRANSACTIONまでの後続のすべてのSQLステートメントがステートメント内のどこでも完全に適用されるかまたはエラーが発生した場合にはまったく適用されないことを保証する。これは有効な状態(例えば、その行が論理的に削除されていない限り、PK_latest毎にせいぜい1つのSOURCE_END_TS、せいぜい1つのアクティブな行)で目標テーブルを残すことが必要である。
【0157】
以下は、適用ステップ201に関連付けられる擬似コードの例である。

ステップ201 擬似コード:
START TRANSACTION
【0158】
図19は、アップデートされた非コア602行の以前のバージョンの期限切れである、適用ステップ202を示すデータフロー図600である。非コア行をアップデートするために、終了タイムスタンプはETLインジケータが「U」に設定されているX_table606から最新の主キー内でnullから最先の後継行の開始タイムスタンプにアップデート604される。このステップは、アップデート用の最新の非コア行の終了タイムスタンプを設定することを、次の行の開始タイムスタンプである1行の終了タイムスタンプでカバーする。
【0159】
以下は、適用ステップ202に関連付けられる擬似コードの例である。

ステップ202−擬似コード
UPDATE noncore
SET SOURCE_END_TS=MIN(X−table.SRC_START_TS)
CDW_END_TS=current timestamp for table
WHERE noncore.PK_Latest=X−table.PK_Latest
AND SOURCE_END_TS IS NULL
AND X−table.SRC_START_TS>=noncore.SOURCE_START_TS
AND X−table.ETL_INDICATOR=‘U’
AND src_start_ts is the earliest within the PK_Latest;
【0160】
図20は、ETLインジケータI、OおよびU用の非コア624への新しい行の挿入622である、適用ステップ203を示すデータフロー図620である。削除用にマークされた行を除いて、すべての入力行がロードされる。最新の、残りのUおよびすべてのO行になる、IのETL_Indicatorを有するおよびいくつかはUのETL_Indicatorを有する行は事前期限切れである。caseステートメントは、ソース用の終了タイムスタンプがX_table626(ほとんどの場合、ETLインジケータはOおよびU)でnullでない際に、終了タイムスタンプを固定された、現在のタイムスタンプに設定するために使用される。削除を除き、すべての入力行がロードされる。主キー毎にI行および1つのU行は追加のU行が事前期限切れにしている間に最新(終了タイムスタンプなしで)になることができる。
【0161】
以下は、適用ステップ203に関連付けられる擬似コードの例である。

ステップ203−擬似コード
INSERT into noncore
Select * from X−table
Where ETL_Indicator=‘I’,‘O’or‘U’;
【0162】
図21は、前の行から後の期限切れを継承すべき際に非コアデータ642内の新しく挿入された「O」行をアップデートすることである、適用ステップ204を示すデータフロー図640である。これは、行が既に削除されている(期限切れ644)が、削除が行われる前であるが論理的に削除された行の開始時間後に起こることであるアウト−オブ−シーケンスのアップデートを受信したケースである。最新のソース開始タイムスタンプを有しているので、新たに挿入された行はもっと後の終了タイムスタンプを取得すべきである。適用ステップ204はX_table646からのPKのみをフィルタしてもよい。
【0163】
以下は、適用ステップ204に関連付けられる擬似コードの例である。

ステップ204−擬似コード
UPDATE NC_Tbl
FROM
noncore NC_Tbl,
(SELECT PK_Latest MAX(SOURCE_END_TS)MAX_END_TS
FROM noncore
WHERE(PK_Latest in(SELECT PK_Latest FROM X_table))
GROUP BY PK_Latest)Max_NC
SET SOURCE_END_TS=Max_NC.MAX_END_TS,
CDW_END_TS=current timestamp for table
WHERE NC_Tbl.PK_Latest=Max_NC.PK_Latest
AND NC_Tbl.SOURCE_START_TS<Max_NC.MAX_END_TS
AND NC_Tbl.SOURCE_END_TS IS NULL;
【0164】
図22は、既に期限切れの非コア662行上での終了タイムスタンプのアップデートであるが、適用ステップ203中その直後に挿入された「し損ない」アップデート664を有していた、適用ステップ205を示すデータフロー図660である。適用ステップ205では、「O」行は、「O」行が挿入されていることにより現在別の後続行を有する行の終了タイムスタンプを修正するためにX_table666から使用される。新しい終了タイムスタンプは新たに挿入された「O」行の開始タイムスタンプである。
【0165】
以下は、適用ステップ205に関連付けられる擬似コードの例である。

ステップ205−擬似コード
UPDATE NC_Tbl
FROM noncore NC_Tbl,
(SELECT NC_Tbl.PK_Latest
,X_Tbl.SRC_START_TS SRC_END_TS
,MAX(NC_Tbl.SOURCE_START_TS)SOURCE_START_TS
FROM(SELECT PK_Latest
,SRC_START_TS
FROM X−Table
WHERE ETL_INDICATOR=‘O’)X_Tbl
,(SELECT PK_Latest
,SOURCE_START_TS
FROM noncore)NC_Tbl
WHERE NC_Tbl.PK_Latest=X_Tbl.PK_Latest
AND NC_Tbl.SOURCE_START_TS<X_Tbl.SRC_START_TS
GROUP BY NC_Tbl.PK_Latest,X_Tbl.SRC_START_TS
)QQQ
SET SOURCE_END_TS=QQQ.SRC_END_TS,
CDW_END_TS=current timestamp for table
WHERE NC_Tbl.PK_Latest=QQQ.PK_Latest
AND NC_Tbl.SOURCE_START_TS=QQQ.SOURCE_START_TS;
【0166】
図23は、論理的な削除による非コア行の期限切れである、適用ステップ206を示すデータフロー図680である。「D」のETL_Indicatorについては、ソース開始タイムスタンプは完全目標主キーを提供し、終了タイムスタンプを削除タイムスタンプ値にアップデート684するためにX_table682内のソース終了タイムスタンプ内に保存されている。
【0167】
以下は、適用ステップ206に関連付けられる擬似コードの例である。

ステップ206−擬似コード
UPDATE NC_Tbl
FROM noncore NC_Tbl,x table X_Tbl
Set NC_Tbl source end ts=X tbl source start ts,
NC_Tbl.cdw end ts=current timestamp for table
Where NC_Tbl.PK_latest=X_Tbl.PK_latest
And NC_Tbl.source_start_ts=X_Tbl.src_end ts−−ensures 1−to−1
And X_Table.ETL_lndicator is ‘D’
And NC_Tbl source end ts is null or greater than X table start ts
【0168】
以下は、適用ステップ207に関連付けられる擬似コードの例である。

ステップ207−擬似コード
END TRANSACTION
Evaluate whether to refresh noncore statistics
【0169】
例示的な実施形態では、すべての変更データキャプチャ(CDC)のプロセス(上述したステップおよび適用ステップ)は、W_tableおよび/またはX_tableへの書き込みをするまたは所与のソースシステムまたは目標テーブルのセット用にCDCを呼び出す、任意の後続のミニバッチデータロードの部分が始まる前に完了している。このように、ロードプロセス全体は、W_tableおよび/またはX_tableへの書き込みおよびCDCの呼び出しを除いてシリアライズされない。
【0170】
上述の実施形態は、連続的に利用できる一時的な正規化されたデータウェアハウス内に多くの場合10または15分程度のミニバッチスケジュールをサポートするのに十分な効率で、変更せずに任意のソースシステムからのデータの任意のボリュームをロードするために利用される。これらの実施形態は、小さなデータベース固有の調整(例えば、列をリストするカタログテーブルの名前)を伴い、履歴を保持し積極的に参照整合性を実施する必要のない一時的な正規化されたデータウェアハウスをロードするためにANSI SQL−2003標準(またはいくつかの変換での下位の標準)をサポートする任意のリレーショナルデータベースで使用することができる。さらに、具現化されたメタデータ最適化パラメータの使用は、特にワークロードをパーティショニングすることに関して、データウェアハウスで一般的に使用されるより高価な超並列処理(MPP)アーキテクチャではなく、対称型マルチプロセッシング(SMP)アーキテクチャを使用した商用コンピュータサーバ上で、増加した待ち時間で、データのローディングを許可するロードプロセス毎のコンピューティングリソースのコストを十分に低減することを促進する。本実施形態は、時間間隔に関して連続的に重複する場合、主キー内の複数の行が一度に処理され、シーケンスされ、折り畳まれることができるように、候補行のセット内およびそれらの行と目標データベース間で動作する。
【0171】
したがって、少なくとも1つの実施形態では、一時的に正規化されたデータウェアハウスを移入する方法は、それ自体および演算子(set−SQL)のリレーショナル代数セットを使用してネット変更データを識別およびシーケンスする、およびデータがデータウェアハウス自体の中に残存する間すべてのデータウェアハウスへの挿入および一時的なアップデートを適用する、既存のデータウェアハウスに関する入力データのセットを解析することを含むことが提供される。上述した方法を達成するために、ソフトウェアコードは、データの挿入および一時的なアップデートを実行するために動的に生成されることができ、次に生成されたコードが実行される。加えて、連続したデータは期間の最小数に圧縮され、一意なタイムスタンプ内のマイクロ秒レベルのシーケンスが必要に応じて生成および維持される。
【0172】
少なくとも1つの実施形態において、システムは、データウェアハウス、データウェアハウス内に格納される入力データのセットを受信する能力、およびデータウェアハウス内に以前に格納されたものにその対する受信データのネット変更を識別しシーケンスするように動作可能なシーケンシングユニットを含むことが提供される。システムは、最小期間内に連続するデータを圧縮するように動作可能な1つ以上の圧縮ユニット、データウェアハウスのアップデートを実行するためのコードを生成するオートコーダユニット、および生成されたコードを実行するための実行ユニットを含んでいてもよい。シーケンシングユニットは広く受け入れられているANSI標準構造化照会言語(SQL)データ操作言語(DML)を使用して、このインスタンスで実装されたデータを識別およびシーケンスするための演算子のリレーショナル代数セットを利用するように動作可能である。
【0173】
オペレーショナルデータストアおよびデータマートの数百を置き換える、すべての分析ニーズではない場合のほとんどのための正規化された一時的なデータウェアハウスの単一または少数を有するために大きな成功を収めている企業が事業を活発化していることが広く認識されている。このパラダイムは効率的で比較的非侵入型のロードソフトウェアのまったく新しいタイプのための実質的な必要性を作成している。記述された実施形態は、作業としてのデータロードサーバ利用およびネットワークトラフィック内での大規模なコスト削減がデータベース内のSQLではるかに効率的に処理され、そして連続的なクエリの可用性を厳密にサポートするためにローディング期間中に目標データベースの第2のコピーの必要性を回避する(第2のコピーはまだ他の理由のために利用されてもよい)、一時的なデータウェアハウスのための開発および維持コストの劇的な削減を提供する。記述された実施形態は、1つ以上の目的領域または企業全体であろうと、一時的なデータウェアハウスの使用が世界的に成長する任意のデータベースプラットフォームに適用可能であり、データウェアハウスの範囲に渡る連続的に利用可能なデータの単一のコピーからの解析ニーズ(運用上、戦術的、戦略的)の複数のタイプをサポートするデータウェアハウス戦略を一意に可能にしながら同様の機能を提供する現在の技術はない。
【0174】
記述されたシステムおよび方法はほぼリアルタイム、および単一システム内のすべてのデータの単一コピーを必要な最小の期間内に正規化された完全な一時的履歴で、適切なセキュリティおよび承認のコントロールを介して、継続的およびほぼ即時の外部からのアクセスを順番に可能にする単一の正規化されたデータウェアハウスの最小限に侵入型のロードをサポートする。
【0175】
例示的な実施形態では、入力データセットのパーティショニングはオプションである。パーティションは実行中のプロセスが複数のパーティションからのデータにアクセスしないように独立して処理されてもよい。むしろ、さらに上述したように、各パーティションの処理結果は、単一の適用するステップで使用するためのX_tableに蓄積されてもよい(並列化またはパーティショニングされずに)。
【0176】
いくつかの実施形態は入力データセットをインポートする揮発性(例えば、非永続的)テーブルを用いる。揮発性テーブルのフルセットは、例えばパーティションが指定されている際に使用されてもよい。さらに、データは、従来の、永続的な(「物理的な」)テーブルおよびパーティションなしで使用するかまたはパーティションおよび物理的なテーブルの揮発性コピーを使用するかどうかのどちらであっても、パーティション毎に1セット(例えば、パーティション毎に4つの仮想テーブル)で、コンピュータデータウェアハウス(CDW)内の既存のデータおよび入力データセットとの間で正規化(例えば、一時的に正規化)されてもよい。
【0177】
本発明の実施形態は、データベースサーバ16および/またはアプリケーションサーバ24(図2に示す)などのような1つ以上のコンピューティング装置を使用して実行されてもよい。図24は、例示的なコンピューティング装置700のブロック図である。例示的な実施形態では、コンピューティング装置700は、プロセッサユニット710、メモリ715、永続的ストレージ720、通信ユニット725、入力/出力(I/O)ユニット730、およびディスプレイ735のようなプレゼンテーションインターフェースとの間の通信を提供する通信ファブリック705を含む。プレゼンテーションインターフェースに加えてまたは代替として、オーディオ装置(図示せず)および/またはユーザに情報を伝えることができる任意の装置を含んでいてもよい。
【0178】
プロセッサユニット710はメモリ715にロードされてもよいソフトウェア用の命令を実行する。プロセッサユニット710は1つ以上のプロセッサのセットであってもよく、または特定の実装に応じて、複数のプロセッサコアを含んでいてもよい。さらに、プロセッサユニット710はメインプロセッサが単一チップ上に二次プロセッサと存在する1つ以上の異機種プロセッサシステムを用いて実装されてもよい。別の実施形態では、プロセッサユニット710は同じタイプの複数のプロセッサを含む同機種プロセッサシステムであってもよい。
【0179】
メモリ715および永続的ストレージ720はストレージ装置の例である。本明細書で使用されるストレージ装置は一時的および/または永続的のいずれかの情報を格納することができるハードウェアの任意の部分である。メモリ715は、例えば、限定されないが、ランダムアクセスメモリおよび/または他の任意の適当な揮発性または不揮発性のストレージ装置であってもよい。永続的ストレージ720は特定の実装に応じて様々な形態を採ってもよく、永続的ストレージ720は1つ以上のコンポーネントまたは装置を含んでいてもよい。例えば、永続的ストレージ720はハードドライブ、フラッシュメモリ、書き換え可能な光ディスク、書き換え可能な磁気テープ、および/または上記のいくつかの組み合わせであってもよい。永続的ストレージ720により使用される媒体はまたリムーバブルであってもよい。例えば、限定されないが、リムーバブルハードドライブは永続的ストレージ720に使用されてもよい。
【0180】
メモリ715および/または永続的ストレージ720などのストレージ装置は、本明細書に記述されたプロセスで使用するためのデータを格納するように構成されてもよい。例えば、ストレージ装置はコンピュータ実行可能命令、実行可能なソフトウェアコンポーネント(例えば、データロードコンポーネントおよび/またはデータウェアハウスコンポーネント)、データソースから受信したデータ、コンフィギュレーションデータ(例えば、最適化オプション)、および/または本明細書に記述した方法での使用に適した任意の他の情報を格納してもよい。
【0181】
通信ユニット725は、これらの例では、他のコンピューティング装置またはシステムとの通信を提供する。例示的な実施形態では、通信ユニット725はネットワークインターフェースカードである。通信ユニット725は物理的および無線通信リンクの一方または両方の使用を通した通信を提供してもよい。
【0182】
入力/出力ユニット730はコンピューティング装置700に接続されてもよい他の装置とのデータの入力および出力を可能にする。例えば、限定されないが、入力/出力ユニット730はキーボードおよび/またはマウスのようなユーザ入力装置を通してユーザ入力用の接続を提供してもよい。さらに、入力/出力ユニット730はプリンタに出力を送ってもよい。ディスプレイ735はユーザに情報を表示するための機構を提供する。例えば、ディスプレイ735のようなプレゼンテーションインターフェースはグラフィカルユーザインターフェースを表示してもよい。
【0183】
オペレーティングシステムおよびアプリケーション用の命令またはプログラムは永続的ストレージ720上に配置される。これらの命令はプロセッサユニット710による実行のためにメモリ715にロードされてもよい。異なる実施形態のプロセスはメモリ715などのようなメモリ内に配置されてもよいコンピュータ実装命令および/またはコンピュータ実行可能命令を使用して、プロセッサユニット710により実行されてもよい。これらの命令はプロセッサユニット710内のプロセッサにより読み取られて実行されてもよいプログラムコード(例えば、オブジェクトコードおよび/またはソースコード)と本明細書では呼ばれる。別の実施形態でのプログラムコードは、メモリ715または永続的ストレージ720のような異なる物理的または有形のコンピュータ可読媒体上に具現化されてもよい。
【0184】
プログラムコード740は、選択的に取り外し可能であり、プロセッサユニット710による実行のためにコンピューティング装置700上にロードまたは転送されてもよい非一時的なコンピュータ可読媒体745上に機能的な形式で配置される。プログラムコード740およびコンピュータ可読媒体745はこれらの例ではコンピュータプログラム製品750を形成する。一例では、コンピュータ可読媒体745は、例えば永続的ストレージ720の一部であるハードドライブなどのようなストレージ装置への転送のための永続的ストレージ720の一部であるドライブまたは他の装置に挿入または配置される光学的または磁気ディスクなどのような有形の形態であってもよい。有形の形態では、コンピュータ可読媒体745はまた、コンピューティング装置700に接続されたハードドライブ、サムドライブ、またはフラッシュメモリなどのような永続的ストレージの形態をとってもよい。コンピュータ可読媒体745の有形の形態はまたコンピュータ記録可能記憶媒体とも呼ばれる。いくつかの例では、コンピュータ可読媒体745は取り外し可能でなくてもよい。
【0185】
あるいは、プログラムコード740は通信ユニット725への通信リンクを介しておよび/または入力/出力ユニット730への接続を介してコンピュータ可読媒体745からコンピューティング装置700に転送されてもよい。通信リンクおよび/または接続は、例示的な実施例では物理的またはワイヤレスであってもよい。コンピュータ可読媒体はまた、プログラムコードを含む通信リンクまたはワイヤレス送信などのような非有形媒体の形態をとってもよい。
【0186】
いくつかの例示的な実施形態では、プログラムコード740はコンピューティング装置700内で使用するために別のコンピューティング装置またはコンピュータシステムから永続的ストレージ装置720にネットワークを介してダウンロードされてもよい。例えば、サーバコンピューティング装置内のコンピュータ可読記憶媒体に格納されたプログラムコードはサーバからコンピューティング装置700にネットワークを介してダウンロードされてもよい。プログラムコード740を提供するコンピューティング装置はサーバコンピュータ、ワークステーション、クライアントコンピュータ、またはプログラムコード740を格納および送信することができる他の何らかの装置であってもよい。
【0187】
プログラムコード740は機能的に関連するコンピュータ実行可能コンポーネントに編成されてもよい。各コンポーネントは、プロセッサユニット710により実行される際に、プロセッサユニット710を本明細書に記述の1つ以上の操作を実行させるようにするためのコンピュータ実行可能命令を含んでいてもよい。
【0188】
コンピューティング装置700用に本明細書で示された異なるコンポーネントは、異なる実施形態を実装されてもよい方法へのアーキテクチャ上の制限を提供することを意味するものではない。別の例示的な実施形態は、コンピューティング装置700用に示されるこれらに加えてまたはその代わりのコンポーネントを含むコンピュータシステムにおいて実装されてもよい。例えば、図24に示す他のコンポーネントは図示の例示的な実施例から変化させることができる。
【0189】
一例として、コンピューティング装置700内のストレージ装置はデータを格納してもよい任意のハードウェア装置である。メモリ715、永続的ストレージ720およびコンピュータ可読媒体745は、有形形態のストレージ装置の例である。
【0190】
別の例では、バスシステムは通信ファブリック705を実装するために使用されてもよく、システムバスまたは入出力バスなどのような1つ以上のバスを含んでいてもよい。勿論、バスシステムはバスシステムに接続される異なるコンポーネントまたは装置間のデータ転送を提供するアーキテクチャの任意の適切なタイプを使用して実装されてもよい。加えて、通信ユニットは、モデムまたはネットワークアダプタなどのようなデータを送受信するために使用される1つ以上の装置を含んでいてもよい。さらに、メモリは、例えば、限定されないが、通信ファブリック705に存在してもよいインターフェースおよびメモリコントローラハブに見られるようなメモリ715またはキャッシュであってもよい。
【0191】
上述した実施形態は入力データセットを一時的なデータウェアハウスにロードするのに使用するためのシステムを提供する。このようなシステムは、一時的なデータウェアハウスおよび入力データセットを含むストレージ装置およびストレージ装置に結合されたプロセッサユニットを含む。少なくとも1つの実施形態におけるプロセッサは、入力データセットを第1のパーティションおよび第2パーティションを含む複数のパーティションに分割するようにプログラムされ、複数のパーティションの各パーティションは、第1のパーティションをプリロードテーブルにインポートし、第2のパーティションをプリロードテーブルにインポートし、そしてプリロードテーブルを一時的なデータウェアハウスに適用する、複数のデータレコードを含む。
【0192】
別の実施形態では、プロセッサユニットは、少なくとも1つのデータレコードに対応するハッシュ値を生成するための少なくとも1つのデータレコードに関連付けられた主キーにハッシュ関数を適用することにより少なくとも部分的に複数のパーティションに入力データセットを分割するようにプログラムされる。別の実施形態では、プロセッサユニットは、第1のパーティションがテーブルにプリロードされた後に第2のパーティションをプリロードテーブルにインポートするようにさらにプログラムされる。さらに別の実施形態では、プロセッサユニットは、第1のパーティションがプリロードテーブルにインポートされている間に第2のパーティションをプリロードテーブルにインポートするようにさらにプログラムされる。そのような実施形態では、プロセッサユニットは、並列インポートの現在の量が並列インポートの所定の最大量よりも少ないことを判定することに基づいて、第1のパーティションがプリロードテーブルにインポートされている間に第2のパーティションをプリロードテーブルにインポートするようにプログラムされる。
【0193】
代替実施形態では、プロセッサユニットは、少なくとも第1のパーティションの1つおよびパーティションに対応する揮発性テーブルおよび揮発性テーブルからプリロードテーブルへデータレコードのコピー内にパーティションのデータレコードのインポートにより少なくとも部分的に第2のパーティションをインポートするようにプログラムされる。
【0194】
さらに別の実施形態では、プロセッサユニットは、以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む最初のパーティション内のデータレコードを識別し、第1のパーティションをプリロードテーブルにインポートする際に識別されたデータレコードを除外するようにさらにプログラムされる。入力データはソースデータベースからのデータのスナップショットを含むかもしれず、このような実施形態では、プロセッサユニットは、一時的なデータウェアハウス内のアクティブなデータレコードが入力データセット内のデータレコードに関連付けられていないことを検出し、前記検出に基づいてアクティブデータレコードの暗示的削除を実行するようにさらにプログラムされる。プロセッサユニットは、入力データセット内の最初のデータレコードに関連付けられている最先のソースタイムスタンプを決定し、最先のソースタイムスタンプの直前のソースタイムスタンプに関連付けられた一時的なデータウェアハウス内のデータレコードおよび最先のソースタイムスタンプよりも後のソースタイムスタンプに関連付けられている一時的なデータウェアハウス内の1つ以上のデータレコードを表す主キーのセットを識別し、そして主キーの識別されたセットに基づいて第1のパーティションおよび第2のパーティションをインポートするようにさらにプログラムされるかもしれない。
【0195】
加えて、本明細書に記述の実施形態は、一時的なデータウェアハウスに複数のデータレコードのローディングに使用するための方法を提供する。このような方法は、コンピューティング装置により、データレコードを第1のパーティションおよび第2パーティションを含む複数のパーティションに分割すること、コンピューティング装置により、第1のパーティションをプリロードテーブルにインポートすること、コンピューティング装置により、第2のパーティションをプリロードテーブルにインポートすること、およびコンピューティング装置により、プリロードテーブルを一時的なデータウェアハウスに適用することを含む。本方法の特定の実施形態では第1のパーティションおよび第2のパーティションは並列にインポートされる。方法は並列インポートの現在の量が並列インポートの所定の最大量よりも少ないことを判定することをさらに含んでいてもよく、第1のパーティションおよび第2のパーティションは前記判定に基づいて並列にインポートされる。方法は並列インポートの現在の量が並列インポートの所定の最大量よりも多いか等しいことを判定することをさらに含んでいてもよく、第1のパーティションおよび第2のパーティションは前記判定に基づいて連続してインポートされる。
【0196】
本方法の代替実施形態は、コンピューティング装置により、少なくとも1つのデータレコードに関連付けられたハッシュ値を作成するために、少なくとも1つのデータレコードにハッシュ関数を適用することを備える複数のパーティション内にデータを分割すること、および少なくとも1つのデータレコードに対応するおよび関連付けられたパーティション番号を決定するためにパーティションの所定量に基づいたハッシュ値にモジュロ演算子を適用することを意図する。
【0197】
本方法の実施形態はまた、以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む第1のパーティション内のデータレコードを識別し、第1のパーティションをプリロードテーブルにインポートする際に識別されたデータレコードを除外することを含んでいてもよい。
【0198】
上述の実施形態は、ネット変更データでデータウェアハウスをロードするためにその上で具現化されたコンピュータ実行可能命令を有する非一時的なコンピュータ可読媒体を備えるコンピュータプログラム製品としてさらに特徴付けられてもよい。少なくとも1つのプロセッサにより実行される際に、コンピュータ実行可能命令はプロセッサが入力データセットを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割するようにさせ、複数のパーティションのうちの少なくとも1つのパーティションは、第1のパーティションをプリロードテーブルにインポートし、第2のパーティションをプリロードテーブルにインポートし、そしてプリロードテーブルをデータウェアハウスに適用する、複数のデータレコードを含む。
【0199】
さらに実施形態では、コンピュータ実行可能命令は、少なくとも1つのプロセッサが第1のパーティションおよび第2のパーティションを互いに並列にインポートさせるようにする。他の実施形態では、コンピュータ実行可能命令は、少なくとも1つのプロセッサが並列インポートの現在の量と並列インポートの所定の最大量を比較するようにさらにさせ、並列インポートの現在の量が最大量よりも少ない時、第1のパーティションのインポートと並行して第2のパーティションをインポートし、並列インポートの現在の量が最大量よりも多いか等しい時、第1のパーティションのインポート後に第2のパーティションをインポートする。
【0200】
さらに別の実施形態では、コンピュータ実行可能命令は、少なくとも1つのプロセッサが、第2のパーティションのデータレコードを第2のパーティションに対応する第2の揮発性テーブルにインポートし、第1の揮発性テーブルおよび第2の揮発性テーブルのデータレコードをプリロードテーブルにコピーする、第1のパーティションに対応する第1の揮発性テーブル内に第1のパーティションのデータレコードをインポートすることにより少なくとも部分的に第1のパーティションおよび第2のパーティションをインポートするようにさせる。
【0201】
さらに別の実施形態では、入力データセットはソースデータベースからのデータのスナップショットを含み、コンピュータ実行可能命令は少なくとも1つのプロセッサがデータウェアハウス内のアクティブなデータレコードが入力データセット内のデータレコードに関連付けられていないことを検出し、そして前記検出に応答してアクティブなデータレコードの暗示的削除を実行するようにさらにさせる。
【0202】
本明細書は最良の形態を含む本発明を開示するために、また任意の当業者が任意の装置またはシステムを製造および使用することおよび任意の組み込まれた方法を実行することを含めて本発明を実施できるようにするために例示を使用する。本発明の特許可能な範囲は特許請求の範囲によって定義され、当業者が想到する他の例示を含んでいてもよい。そのような他の例示は、それらが特許請求の範囲の文言と異ならない構造要素を有する場合、またはそれらが特許請求の範囲の文言と実質的に差違のない同等な構造要素を含む場合、特許請求の範囲内にあることが意図される。
また、本願は以下に記載する態様を含む。
(態様1)
入力データセットの一時的なデータウェアハウスへのローディングに使用するためのシステム(10)であって、
一時的なデータウェアハウスおよび入力データセットを含むストレージ装置(720)と、
前記ストレージ装置に結合され、
前記入力データセットを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割し、前記複数のパーティションの各パーティションは複数のデータレコードを含み、
前記第1のパーティションをプリロードテーブルにインポートし、
前記第2のパーティションを前記プリロードテーブルにインポートし、
前記プリロードテーブルを前記一時的なデータウェアハウスに適用する、
ようにプログラムされたプロセッサユニット(710)と、
を備えるシステム。
(態様2)
前記プロセッサユニット(710)は、前記入力データセットを少なくとも1つのデータレコードに対応するハッシュ値を生成するために前記少なくとも1つのデータレコードに関連付けられた主キーにハッシュ関数を適用することにより少なくとも部分的に前記複数のパーティションに分割するようにプログラムされる、態様1に記載のシステム(10)。
(態様3)
前記プロセッサユニット(710)は、前記第1のパーティションが前記テーブルにプリロードされた後、前記第2のパーティションを前記プリロードテーブルにインポートするようにさらにプログラムされる、態様1に記載のシステム(10)。
(態様4)
前記プロセッサユニット(710)は、前記第1のパーティションが前記プリロードテーブルにインポートされている間、前記第2のパーティションを前記プリロードテーブルにインポートするようにさらにプログラムされる、態様1に記載のシステム(10)。
(態様5)
前記プロセッサユニット(710)は、並列インポートの現在の量が並列インポートの所定の最大数よりも少ないことの判定に基づいて、前記第1のパーティションが前記プリロードテーブルにインポートされている間、前記第2のパーティションを前記プリロードテーブルにインポートするようにプログラムされる、態様4に記載のシステム(10)。
(態様6)
前記プロセッサユニット(710)は、少なくとも部分的に、
前記パーティションの前記データレコードを前記パーティションに対応する揮発性テーブルにインポートすることと、
前記データレコードを前記揮発性テーブルから前記プリロードテーブルにコピーすることと、
により前記第1のパーティションおよび前記第2のパーティションの少なくとも1つをインポートするようにプログラムされる、態様1に記載のシステム(10)。
(態様7)
前記プロセッサユニット(710)は、
以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む前記第1のパーティション内のデータレコードを識別し、
前記第1のパーティションを前記プリロードテーブルにインポートする際に前記識別されたデータレコードを除外する、
ようにさらにプログラムされる態様1に記載のシステム(10)。
(態様8)
前記入力データは、ソースデータベース(20)からのデータのスナップショットを含み、前記プロセッサユニット(710)は、
一時的なデータウェアハウス内のアクティブデータレコードが前記入力データセット内のデータレコードに関連付けられていないことを検出し、
前記検出に基づいて前記アクティブデータレコードの暗示的削除を実行する、
ようにさらにプログラムされる、態様1に記載のシステム(10)。
(態様9)
前記プロセッサユニット(710)は、
前記入力データセット内の最初のデータレコードに関連付けられた最先のソースタイムスタンプを決定し
前記最先のソースタイムスタンプの直前のソースタイムスタンプに関連付けられた前記一時的なデータウェアハウス内のデータレコードと、
前記最先のソースタイムスタンプよりも後のソースタイムスタンプに関連付けられている前記一時的なデータウェアハウス内の1つ以上のデータレコードと、
を表す主キーのセットを識別し、
主キーの前記識別されたセットに基づいて前記第1のパーティションおよび前記第2のパーティションをインポートする、
ようにさらにプログラムされる、態様8に記載のシステム(10)。
(態様10)
一時的なデータウェアハウスへの複数のデータレコードのローディングに使用するための方法であって、
コンピューティング装置(700)により、前記データレコードを第1のパーティションおよび第2のパーティションを含む複数のパーティションに分割することと、
前記コンピューティング装置により、前記第1のパーティションをプリロードテーブルにインポートすることと、
前記コンピューティング装置により、前記第2のパーティションを前記プリロードテーブルにインポートすることと、
前記コンピューティング装置により、前記プリロードテーブルを前記一時的なデータウェアハウスに適用することと、
を備える方法。
(態様11)
前記第1のパーティションおよび前記第2のパーティションは並列にインポートされる、態様10に記載の方法。
(態様12)
並列インポートの現在の量は、並列インポートの所定の最大量よりも少ないことを判定することであって、前記判定に基づいて前記第1のパーティションおよび前記第2のパーティションは並列にインポートされる、判定することをさらに備える、態様10に記載の方法。
(態様13)
前記並列インポートの現在の量は、並列インポートの所定の最大量よりも多いか等しいことを判定することであって、前記判定に基づいて前記第1のパーティションおよび前記第2のパーティションは連続してインポートされる、判定することをさらに備える、態様10に記載の方法。
(態様14)
コンピューティング装置(700)により、前記データを前記複数のパーティションに分割することは、
少なくとも1つのデータレコードに関連付けられたハッシュ値を作成するために、ハッシュ関数を前記少なくとも1つのデータレコードに適用することと、
前記少なくとも1つのデータレコードに対応するおよび関連付けられたパーティション数を決定するためにパーティションの所定量に基づいてモジュロ演算子を前記ハッシュ値に適用することと、
を備える、態様10に記載の方法。
(態様15)
以前にインポートされたデータレコードの非キーフィールドに等しいタイムスタンプ以外の複数のフィールドを含む第1のパーティション内のデータレコードを識別することと、
前記第1のパーティションを前記プリロードテーブルにインポートする際に前記識別されたデータレコードを除外することと、
をさらに備える、態様10に記載の方法。
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
図16
図17
図18
図19
図20
図21
図22
図23
図24