宛先に変更を適用

適用対象:SQL Server Azure Data Factory の SSIS 統合ランタイム

変更データの増分読み込みを実行する Integration Services パッケージのデータ フローにおいて、3 番目に行う最後のタスクは、変更を変換先に適用することです。 挿入を適用するコンポーネント、更新を適用するコンポーネント、および削除を適用するコンポーネントが必要です。

注

変更データの増分読み込みを実行するパッケージのデータ フローをデザインするための 2 番目のタスクは、挿入、更新、および削除を分割することです。 このコンポーネントの詳細については、「 挿入、更新、および削除を処理する」を参照してください。 変更データの増分読み込みを実行するパッケージを作成するプロセス全体の説明については、「変更データ キャプチャ (SSIS)」を参照してください。

インサートの取り付け

挿入を適用するには、新しい行で特別な処理は必要ないので、OLE DB 変換先を使用します。

OLE DB 変換先を使用して挿入を処理するには

  1. [データ フロー] タブで、OLE DB 変換先を追加します。

  2. 条件分割変換の挿入を含む出力を OLE DB デスティネーションに接続します。

  3. [OLE DB 変換先エディター]の [接続マネージャー] ページで、次のオプションを選択します。

    1. 変換先データベースの OLE DB 接続マネージャーを選択または作成します。

    2. [データ アクセス モード] オプションを選択して、変換先テーブルを選択するか、変換先列を含む SQL ステートメントを入力します。

  4. エディターの [マッピング] ページで、変更データの適切な列を変換先テーブルにマップします。

更新の適用

更新を適用するには、OLE DB コマンド変換を使用します。 この変換を使用するのは、パラメーター化された UPDATE ステートメントを使用して、新しい列の値で一度に 1 行ずつ更新する必要があるためです。

注

宛先コンポーネントを使用して更新を適用することもできます。 この方法を使用する場合は、変換先コンポーネントを使用して、このために作成した一時テーブルに行を保存します。 次に、SQL 実行タスクを使用して、一時テーブルから変換先に対して一括更新および一括削除操作を実行します。

OLE DB コマンド変換を使用して更新を処理するには

  1. [データ フロー] タブで、OLE DB コマンド変換を追加します。

  2. 条件分割変換から更新を受け取った出力を OLE DB コマンド変換に接続します。

  3. [OLE DB コマンドの詳細エディター]の [接続マネージャー] タブで、変換先データベースの OLE DB 接続マネージャーを選択または作成します。

  4. OLE DB コマンドの詳細エディターの [コンポーネントのプロパティ] タブの [SqlCommand] に、パラメーター化されたUPDATEステートメントを入力します。

    たとえば、Customer テーブルの UPDATE ステートメントには、次の構文があります。

    update CDCSample.Customer  
    set TerritoryID  = ?,  
        CustomerType  = ?,  
        rowguid  = ?,  
        ModifiedDate  = ?  
    where CustomerID = ?  
    
    
  5. エディターの [ 列マッピング ] タブで、変更データの適切な列を UPDATE ステートメントのパラメーターにマップします。

削除の適用

削除を適用するには、OLE DB コマンド変換を使用します。 この変換を使用するのは、行を一意に識別する列値に基づいて一度に 1 つの行を削除するパラメーター化された DELETE ステートメントを使用する必要があるためです。

注

宛先コンポーネントを使用して削除を反映することもできます。 この方法を使用する場合は、変換先コンポーネントを使用して、このために作成した一時テーブルに行を保存します。 次に、SQL 実行タスクを使用して、一時テーブルから変換先に対して一括更新および一括削除操作を実行します。

OLE DB コマンド変換を使用して削除を処理するには

  1. [データ フロー] タブで、OLE DB コマンド変換をデータ フローに追加します。

  2. 条件分割変換から削除を含む出力を OLE DB コマンド変換に接続します。

  3. 詳細エディターを開いて変換を構成します。

  4. [OLE DB コマンドの詳細エディター]の [接続マネージャー] タブで、変換先データベースの OLE DB 接続マネージャーを選択または作成します。

  5. OLE DB コマンドの詳細エディターのエディターの [コンポーネントのプロパティ] タブで、SqlCommand の場合は、パラメーター化されたDELETEステートメントを入力します。

    たとえば、Customer テーブルの DELETE ステートメントには、次の構文があります。

    delete from Customer where CustomerID = ?  
    
    
  6. エディターの [ 列マッピング ] タブで、変更データの適切な列を DELETE ステートメントのパラメーターにマップします。

MERGE機能を使用した挿入と更新の最適化

特定の変更データ キャプチャ オプションと Transact-SQL MERGE キーワードの使用を組み合わせることで、挿入と更新の処理を最適化できます。 MERGE キーワードの詳細については、「MERGE (Transact-SQL)」を参照してください。

変更データを取得する Transact-SQL ステートメントでは、cdc.fn_cdc_get_net_changes_<capture_instance> 関数を呼び出す際に、row_filter_option パラメーターの値として all with merge を指定できます。 この変更データ キャプチャの関数は、挿入と更新を区別するために必要な追加の処理を実行する必要がない場合、効率が向上します。 all with merge パラメーター値を指定すると、変更データの __$operation 値は、削除の場合は 1、挿入または更新によって生じた変更の場合は 5 になります。 変更データの取得に使用する Transact-SQL 関数の詳細については、「 変更データを取得および理解する」を参照してください。 all with merge パラメーター値を使用して変更を取得したら、削除を適用して、残りの行を一時テーブルまたはステージング テーブルに出力することができます。 次に、ダウンストリームの SQL 実行タスクで、1 つの MERGE ステートメントを使用して、ステージング テーブルから変換先にすべての挿入または更新を適用できます。