次の方法で共有


変更データ キャプチャ (SSIS)

SQL Server では、変更データ キャプチャによって、ソース テーブルからデータ マートおよびデータ ウェアハウスへの増分読み込みを効率的に実行するための効果的なソリューションが実現します。

変更データ キャプチャとは

ソース テーブルは、時間の経過と共に変化します。 このようなテーブルに基づくデータ マートまたはデータ ウェアハウスは、その変化を反映する必要があります。 ただし、ソース全体のスナップショットを定期的にコピーする処理には、膨大な時間とリソースが必要です。 timestamp 列、トリガー、複雑なクエリなどの別の方法を使用すると、多くの場合、パフォーマンスが低下して処理が複雑になります。 ここで必要となるのは、対象となるデータ表現に対して簡単に適用できるように構成された変更データの確実なストリームです。 SQL Server の変更データ キャプチャはこのソリューションを提供します。

データベース エンジン の変更データ キャプチャ機能は、 SQL Server のテーブルに対して適用された挿入、更新、削除の各アクティビティをキャプチャし、変更の詳細を、利用しやすいリレーショナル形式で格納します。 変更データ キャプチャで使用される変更テーブルには、追跡されたソース テーブルの列構造をミラー化する列が、行われた変更を行ごとに理解するために必要なメタデータと共に含まれています。

変更データ キャプチャは、MicrosoftSQL Server のすべてのエディションで使用できるわけではありません。 SQL Server の各エディションでサポートされる機能の一覧については、「 Features Supported by the Editions of SQL Server 2014」を参照してください。

Integration Services における変更データ キャプチャのしくみ

Integration Services パッケージでは、 SQL Server データベース内の変更データを簡単に取得でき、データ ウェアハウスへの増分読み込みを効率的に実行できます。 ただし、 Integration Services を使用して変更データを読み込む前に、管理者は、変更をキャプチャするデータベースおよびテーブルで変更データ キャプチャを有効にする必要があります。 データベースで変更データ キャプチャを構成する方法の詳細については、「変更データ キャプチャの有効化と無効化 (SQL Server)」を参照してください。

データベースで変更データ キャプチャが有効になったら、変更データの増分読み込みを実行するパッケージを作成できます。 次の図は、1 つのテーブルから増分読み込みを実行するパッケージの作成手順を示しています。

変更データ キャプチャ パッケージの作成手順

上の図に示したように、変更データの増分読み込みを実行するパッケージを作成するには、次の手順を実行します。

手順 1: 制御フローの設計 パッケージ内の制御フローで、次のタスクを定義する必要があります。

  • 取得するソース データに対する変更の間隔の開始と終了の datetime 値を計算します。

    これらの値を計算するには、SQL 実行タスクまたは Integration Services 式と datetime 関数を使用します。 その後、これらのエンドポイントをパッケージで後から使用するためにパッケージ変数に格納します。

    詳細:変更データの間隔を指定する

  • 選択した間隔の変更データが準備できているかどうかを判断します。 非同期キャプチャ プロセスが、選択したエンドポイントにまだ達していない可能性があるため、この手順が必要となります。

    データが準備できているかどうかを判断するには、必要に応じて、選択した間隔の変更データが準備できるまで実行を遅延させる 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 Design Pattern - Incremental Load」(SSIS のデザイン パターン - 増分読み込み)