変更データ キャプチャによる増分読み込みの向上
SQL Server では、変更データ キャプチャによって、ソース テーブルからデータ マートおよびデータ ウェアハウスへの増分読み込みを効率的に実行するための効果的なソリューションが実現します。
変更データ キャプチャとは
ソース テーブルは、時間の経過と共に変化します。このようなテーブルに基づくデータ マートまたはデータ ウェアハウスは、その変化を反映する必要があります。ただし、ソース全体のスナップショットを定期的にコピーする処理には、膨大な時間とリソースが必要です。timestamp 列、トリガー、複雑なクエリなどの別の方法を使用すると、多くの場合、パフォーマンスが低下して処理が複雑になります。ここで必要となるのは、対象となるデータ表現に対して簡単に適用できるように構成された変更データの確実なストリームです。SQL Server の変更データ キャプチャはこのソリューションを提供します。
データベース エンジンの変更データ キャプチャ機能は、SQL Server のテーブルに対して適用された挿入、更新、削除の各アクティビティをキャプチャし、変更の詳細を、利用しやすいリレーショナル形式で格納します。変更データ キャプチャで使用される変更テーブルには、追跡されたソース テーブルの列構造をミラー化する列が、行われた変更を行ごとに理解するために必要なメタデータと共に含まれています。
注 |
---|
変更データ キャプチャは、SQL Server 2008 Enterprise Edition、Developer Edition、および Evaluation Edition でのみ使用できます。 |
詳細については、「変更データ キャプチャ」を参照してください。
Integration Services における変更データ キャプチャのしくみ
Integration Services パッケージでは、SQL Server データベース内の変更データを簡単に取得でき、データ ウェアハウスへの増分読み込みを効率的に実行できます。ただし、Integration Services を使用して変更データを読み込む前に、管理者は、変更をキャプチャするデータベースおよびテーブルで変更データ キャプチャを有効にする必要があります。データベースで変更データ キャプチャを構成する方法の詳細については、「変更データ キャプチャの構成」を参照してください。
データベースで変更データ キャプチャが有効になったら、変更データの増分読み込みを実行するパッケージを作成できます。次の図は、1 つのテーブルから増分読み込みを実行するパッケージの作成手順を示しています。
上の図に示したように、変更データの増分読み込みを実行するパッケージを作成するには、次の手順を実行します。
手順 1 : 制御フローのデザイン
パッケージの制御フローでは、次のタスクを定義する必要があります。取得するソース データに対する変更の間隔の開始と終了の datetime 値を計算します。
これらの値を計算するには、datetime 関数を指定した SQL 実行タスクまたは Integration Services 式を使用します。その後、これらのエンドポイントをパッケージで後から使用するためにパッケージ変数に格納します。
詳細については、「変更データの間隔の指定」を参照してください。
選択した間隔の変更データが準備できているかどうかを判断します。非同期キャプチャ プロセスが、選択したエンドポイントにまだ達していない可能性があるため、この手順が必要となります。
データが準備できているかどうかを判断するには、必要に応じて、選択した間隔の変更データが準備できるまで実行を遅延させる For ループ コンテナーをまず用意します。ループ コンテナー内で SQL 実行タスクを使用して、変更データ キャプチャによって管理される時間マッピング テーブルに対するクエリを実行します。その後、Thread.Sleep メソッドを呼び出すスクリプト タスク、または WAITFOR ステートメントを実行する別の SQL 実行タスクを使用して、必要に応じてパッケージの実行を一時的に遅延させます。必要に応じて、エラー状態またはタイムアウトをログに記録する別のスクリプト タスクを使用します。
詳細については、「変更データが準備できているかどうかの判断」を参照してください。
変更データのクエリに使用するクエリ文字列を準備します。
スクリプト タスクまたは SQL 実行タスクを使用して、変更をクエリで確認するために使用する SQL ステートメントを作成します。
詳細については、「変更データのクエリの準備」を参照してください。
手順 2 : 変更データのクエリの設定
データのクエリを実行するテーブル値関数を作成します。SQL Server Management Studio を使用してクエリを作成および保存します。
詳細情報 : 「変更データの取得と理解」
手順 3 : データ フローのデザイン
パッケージのデータ フローでは、次のタスクを定義する必要があります。変更テーブルから変更データを取得します。
データを取得するには、変換元コンポーネントを使用して、選択した間隔内の変更のクエリを変更テーブルに対して実行します。事前に作成しておく必要がある Transact-SQL テーブル値関数が変換元によって呼び出されます。
詳細については、「変更データの取得と理解」を参照してください。
変更を処理用に挿入、更新、および削除に分割します。
変更を分割するには、条件分割変換を使用して、適切な処理のために挿入、更新、および削除を異なる出力に送信します。
詳細については、「挿入、更新、および削除の処理」を参照してください。
挿入、削除、および更新を変換先に適用します。
変更を変換先に適用するには、変換先コンポーネントを使用して、挿入を変換先に適用します。また、OLE DB コマンド変換とパラメーター化された UPDATE および DELETE ステートメントを使用して、更新と削除を変換先に適用します。更新と削除は、変換先コンポーネントを使用して一時テーブルに行を保存することによって適用することもできます。次に、SQL 実行タスクを使用して、一時テーブルから変換先に対して一括更新および一括削除操作を実行します。
詳細については、「変換先への変更の適用」を参照してください。
複数のテーブルの変更データの処理
上の図と手順で説明したプロセスでは、1 つのテーブルから増分読み込みを実行しています。複数のテーブルから増分読み込みを実行する必要がある場合も、全体的に同じプロセスになります。ただし、複数のテーブルの処理に対応できるようにパッケージのデザインを変更する必要があります。複数のテーブルから増分読み込みを実行するパッケージの作成方法の詳細については、「複数のテーブルの増分読み込みの実行」を参照してください。
変更データ キャプチャ パッケージのサンプル
Integration Services には、パッケージで変更データ キャプチャを使用する方法を紹介したサンプルが 2 つ用意されています。詳細については、次のトピックを参照してください。
外部リソース
sqlblog.com のブログ「SSIS のデザイン パターン – 増分読み込み」
|