SAPテーブルコネクタ > SAPテーブルを使用したマッピングとマッピングタスク > SAPテーブルリーダーマッピング向けのデルタ抽出
  

SAPテーブルリーダーマッピング向けのデルタ抽出

SAPテーブルからデータを読み取る際、デルタ抽出を実行するようマッピングを設定できます。デルタ抽出により、変更されたデータのみ読み取ることを選択できます。
デルタ抽出を実行するSAPテーブルとSAPカラムは、SAPの変更ドキュメントオブジェクトの一部である必要があります。SAPで変更ドキュメントを作成する方法の詳細については、SAPのマニュアルを参照してください。
Secure Agentでは、SAPのCDHDR(Change Document Header)テーブルおよびCDPOS(Change Document Position)テーブルを使用して、変更されたデータを抽出します。CDHDRテーブルには変更ドキュメントヘッダー情報を格納します。CDPOSテーブルには変更されたデータの新しい値と古い値を格納します。Secure Agentでは、CDHDRテーブルの変更ドキュメント番号を使用して、CDPOSテーブルの最新の変更番号を検索します。

デルタ抽出動作

差分抽出を設定すると、Secure Agentは、差分レコードの挿入、削除、または更新用にマークされた変更インジケータをSAPから取得しません。そのため、ソースから抽出されたデルタ行には、デフォルトで更新/挿入のマークが付きます。
差分抽出を実行し、その行がSAPターゲットテーブルで使用可能な場合、Secure Agentは差分レコードをターゲットテーブルに更新します。行が使用できない場合、Secure AgentはレコードをSAPターゲットテーブルに挿入します。
SAPソース内の同じレコードに対して挿入、更新、削除などの複数のトランザクションが発生した場合、Secure Agentは1つのレコードのみを取得します。ただし、SAPソーステーブルでレコードの挿入などの操作が発生し、マッピングを実行すると、Secure Agentは挿入されたレコードを取得します。その後、SAPソーステーブルの同じレコードに対する更新が発生し、デルタ抽出マッピングを実行すると、Secure Agentは更新されたレコードを取得します。
SAPテーブル内の削除されたレコードに対して差分抽出を実行すると、Secure Agentは削除された差分レコードのキー値のみをターゲットテーブルに取得します。

Informaticaカスタムテーブル/INFADI/TBLCHNGN

Secure Agentでは、/INFADI/TBLCHNGNという名前のSAPのInfomaticaカスタムテーブルを作成して保持します。テーブル/INFADI/TBLCHNGNは、デルタ抽出に使用される時間をInformaticaマッピング経由でキャプチャします。トランザクションSE11またはSE16を使用してテーブルエントリを確認します。
次の図に、テーブル/INFADI/TBLCHNGNを示します。
図は、/INFADI/TBLCHNGNという名前のInformaticaカスタムテーブルを示します。
テーブル/INFADI/TBLCHNGNには次のカラムが含まれます。
TABLE_NAME
データが抽出される元のSAPソーステーブル名を指定します。
SESSION_ID
デルタ抽出の一意のInformaticaセッションIDを指定します。Secure Agentでは、特定のSAPテーブルについて実行されるマッピングごとに一意のセッションIDを生成します。
PREV_CHNG_NUM
このカラムは、差分抽出マッピングには適用されません。
CURR_CHNG_NUM
このカラムは、差分抽出マッピングには適用されません。
PREV_DAT
前回のデルタ抽出で変更が抽出された範囲の開始日付を示します。デルタ反復オプションを使用すると、Secure Agentはこの情報を使用します。
PREV_TIME
前回のデルタ抽出で変更が抽出された範囲の開始時刻を示します。デルタ反復オプションを使用すると、Secure Agentはこの情報を使用します。
LAST_UPDATED_DAT
前回のデルタ抽出で変更がソースから抽出されたか範囲の終了日付を示します。また、この値は次回のデルタ抽出で変更を抽出する範囲の開始日付でもあります。
LAST_UPDATED_TIM
前回のデルタ抽出で変更がソースから抽出されたか範囲の終了時刻を示します。また、この値は次回のデルタ抽出で変更を抽出する範囲の開始時刻でもあります。

デルタ抽出の更新モード

SAPテーブルリーダーマッピングのデルタ抽出を設定する際には、使用する更新モードを選択します。
次のいずれかの更新モードを選択できます。

フル

[フル]オプションを選択すると、Secure AgentではすべてのレコードをSAPテーブルから抽出します。Secure AgentではInformaticaカスタムテーブル/INFADI/TBLCHNGNにある詳細を更新しません。
このオプションは、変更されたデータのみ読み取るのではなく、すべてのレコードをSAPテーブルから抽出する場合に使用します。
デフォルトは[フル]です。

転送なしのデルタ初期化

[転送なしのデルタ初期化]オプションを選択した場合、Secure AgentはSAPテーブルからデータを抽出しませんが、後続のデルタ抽出のためにLAST_UPDATED_DATとLAST_UPDATED_TIMをInformaticaカスタムテーブル/INFADI/TBLCHNGNに記録します。
Secure Agentでは、以下の作業が実行されます。
このオプションは、データを抽出せずに、後続のデルタ抽出のためにLAST_UPDATED_DATとLAST_UPDATED_TIMをInformaticaカスタムテーブル/INFADI/TBLCHNGNに記録する場合に使用します。
例えば、Customersという名前のテーブルがあり、レコードが500万件含まれているとします。最初のレコードセットを別の製品(Informatica Data Replicationなど)を使用して読み取ってから、そのレコードをTeradataのデータウェアハウスに書き込みます。それからSAPコネクタを使用して、テーブルに追加された新しい顧客レコードのみを読み取ります。この場合、転送なしのデルタ初期化を設定し、続けてデルタ更新セッションを実行すると、変更されたデータをキャプチャできます。

転送ありのデルタ初期化

[転送ありのデルタ初期化]オプションを選択した場合、Secure AgentはSAPテーブルからすべてのレコードを抽出しますが、後続のデルタ抽出のためにLAST_UPDATED_DATとLAST_UPDATED_TIMをInformaticaカスタムテーブル/INFADI/TBLCHNGNに記録することをおすすめします。
Secure Agentトでは、以下の作業が実行されます。
このオプションは、すべてのレコードをSAPテーブルから抽出して最初のデータセットを構築し、続けてデルタ更新セッションを実行して、変更されたデータをキャプチャする場合に使用します。

デルタ更新

[デルタ更新]オプションを選択すると、Secure Agentでは前回のデータ抽出以降に変更されたデータを抽出します。
Secure Agentトでは、以下の作業が実行されます。
このオプションは、前回のデータ抽出以降に変更されたデータのみを読み取る場合に使用します。
差分更新セッションを実行する前に、転送ありの差分初期化または転送なしの差分初期化を実行する必要があります。デルタ初期化を実行すると、Secure Agentがデルタ更新セッションを実行するために使用するLAST_UPDATED_DATおよびLAST_UPDATED_TIMが記録されます。
注: データの損失を防ぐために、Secure Agentがクエリを実行する前に、現在の日付と時刻がフリーズされます。マッピングの実行時にデータが入力された場合、そのデータは次のマッピングの実行時にのみ抽出されます。

デルタ反復

[デルタ反復]オプションを選択すると、Secure Agentではエラーが発生した場合に前回のデルタ更新を反復します。これは、Informaticaカスタムテーブル/INFADI/TBLCHNGNのPREV_DATおよびPREV_TIM値からInformaticaカスタムテーブル/INFADI/TBLCHNGNのLAST_UPDATED_DATおよびLAST_UPDATED_TIM値にレコードを返します。テーブル/INFADI/TBLCHNGNの変更番号は更新しません。
このオプションは、前回のデルタ更新でエラーが発生し、そのデルタ更新を反復する場合に使用します。
差分反復セッションを実行する前に、差分更新を実行する必要があります。

パラメータ

[パラメータ]オプションを選択すると、Secure Agentではパラメータファイルの更新モード値を使用します。パラメータファイルでパラメータ名とパラメータ値を定義します。デルタ抽出で作成したSAPテーブルリーダーマッピングで、パラメータファイルで定義したパラメータ名と同じパラメータ名を指定します。それからマッピングタスクを作成し、そのタスクにパラメータファイル名を指定します。マッピングのパラメータ値を毎回更新する代わりに、パラメータファイルのパラメータ値を更新してマッピングタスクを再度実行することができます。

パラメータファイルのデルタ抽出向け設定

パラメータファイルとは、ユーザー定義パラメータ、およびそれらに関連する値のリストです。デルタ抽出を実行するには、更新モードを変更するたびにマッピングを編集する必要がなくなるよう、更新モードをパラメータファイルで指定します。
パラメータファイルを使用するには、次の手順を実行します。
    1次のディレクトリにパラメータファイルを作成します。
    <Secure Agentのインストールディレクトリ>/apps/Data_Integration_Server/data/userparameters
    2パラメータファイルで、パラメータ名を入力し、使用するパラメータ値を指定します。
    パラメータ名は$$で始まる必要があり、スペース文字を含めることはできません。
    使用する更新モードに基づき、次のパラメータ値のいずれか1つを使用します。
    次の形式を使用してパラメータ名とパラメータ値を指定します。
    $$<パラメータ名>=<パラメータ値>
    パラメータ名とパラメータ値の指定時にはスペース文字を使用しないでください。
    例えば、次のように入力します。$$deltaparameter=0
    3パラメータファイルを保存します。
    4デルタ抽出に使用するSAPテーブルリーダーマッピングを開きます。
    5[パラメータ][更新モード]リストから選択します。
    6[Parameter Name for Update Mode]フィールドで、パラメータファイルで定義したパラメータ名を入力します。
    7マッピングタスクをSAPテーブルリーダーマッピングに基づいて作成します。
    8マッピングタスクの[スケジュール]ページで、[詳細オプション]セクションにパラメータファイル名を入力します。
    9マッピングタスクを実行します。
    更新モードを変更するには、パラメータファイルのパラメータ値を更新し、マッピングタスクを再度実行します。例えば、マッピングタスクを初めて実行する際にパラメータ値を[2]と指定して、転送ありのデルタ初期化を使用できます。最初の抽出をした後には、次にマッピングタスクを実行した際に変更されたデータのみをキャプチャするよう、パラメータ値を3に変更することが推奨されます。マッピングのパラメータ値を毎回更新する代わりに、パラメータファイルのパラメータ値を更新してマッピングタスクを再度実行することができます。

デルタ抽出用のテーブル名の上書きの設定

SAPテーブルリーダーマッピングを設定すると、実行時に選択したテーブル名を構造名で上書きして、デルタ抽出を実行することができます。
デルタ抽出用のSAPテーブルリーダーマッピングを実行すると、Secure Agentは、Change Document Position(CDPOS)テーブルのSAPテーブル名に記録されたエントリのSAPテーブルからの変更されたレコードを取得します。CDPOSテーブルにSAPテーブル構造のエントリがログに記録されている場合は、SAPテーブルの詳細ソースプロパティの[デルタ抽出のテーブル名を上書き]フィールドのテーブル名を上書きすることで、それらのレコードを取得できます。
例えば、マッピングでオブジェクトタイプとして指定したテーブル名がCRMD_ORDERADM_Hである場合、構造名のCDPOSテーブルにキャプチャされたエントリのデルタレコードを取得するには、[デルタ抽出のテーブル名を上書き]フィールドに構造名CRMA_ORDERADM_Hを指定します。Secure Agentは、テーブル構造の変更エントリがログに記録されているCRMA_ORDERADM_Hからレコードを取得します。
CDPOSテーブルにキャプチャされたデルタデータに構造名が含まれない場合は、このフィールドを空白のままにします。

デルタ抽出のルールおよびガイドライン

SAPテーブルリーダーマッピングでのデルタ抽出を設定する際は、次のルールおよびガイドラインを考慮します。

SAPテーブルリーダーマッピング向けデルタ抽出の設定

SAPテーブルリーダーマッピング向けにデルタ抽出を設定するには、使用する更新モードを選択し、必要に応じてマッピングのパラメータを定義します。
    1SAPテーブルからデータを読み取りターゲットにデータを書き込むマッピングを作成します。
    2マッピングで[ソーストランスフォーメーション]をクリックします。
    3[プロパティ]パネルで、[ソース]タブをクリックします。
    4詳細プロパティで、[更新モード]リストから次のいずれかの値を選択します。
    デルタ抽出でのパラメータの使用の詳細については、パラメータファイルのデルタ抽出向け設定を参照してください。
    5マッピングを保存して実行します。

SAPテーブルリーダーマッピングでのデルタ抽出のトラブルシューティング

「テーブル{table_name}はSAPの変更ドキュメントオブジェクトの一部はないため、フル更新モードのみをサポートします」というエラーが表示されるのはなぜですか。
このエラーは、デルタ抽出を実行しようとしているSAPテーブルがSAPの変更ドキュメントオブジェクトの一部でないために発生します。
デルタ抽出を実行するSAPテーブルとSAPカラムがSAPの変更ドキュメントオブジェクトの一部でない場合、デルタ抽出は実行できません。実行できるのはフル抽出のみです。
「/INFADI/TBLCHNGNテーブルにエントリが存在しないため、SAPから現在の日付と時刻を取得するときにエラーが発生しました。先にデルタ初期化セッションを実行してください」というエラーが表示されるのはなぜですか。
デルタ初期化を実行せずにデルタ更新またはデルタ反復セッションを実行した場合にこのエラーが発生します。
デルタ初期化を実行すると、Secure Agentがデルタ更新またはデルタ反復セッションを実行するために使用するLAST_UPDATED_DATおよびLAST_UPDATED_TIMが記録されます。デルタ初期化を実行しない場合、Secure Agentはデルタ更新またはデルタ反復セッションを実行するにLAST_UPDATED_DATおよびLAST_UPDATED_TIMにアクセスできません。
INFADI/TBLCHNGNテーブルで、マッピング実行に対応するエントリをどのように確認できますか。
セッションログからマッピングのセッションIDを確認することができます。INFADI/TBLCHNGNテーブルで、同じセッションIDを探して、マッピング実行についての詳細を表示します。Secure Agentでは、特定のSAPテーブルについて実行されるマッピングごとに一意のセッションIDを生成します。INFADI/TBLCHNGNテーブルのエントリは、セッションIDに基づいてソートすることも可能です。
[フル]または[転送ありのデルタ初期化]オプションを通して抽出されたレコードの件数が、データ反復オプションを通して抽出されたレコードの件数と一致しないのはなぜですか。
[フル]または[転送ありのデルタ初期化]オプションを使用すると、Secure Agentでは、変更ドキュメントでキャプチャされるレコードだけではなく、すべてのレコードをSAPテーブルから直接抽出します。しかし、[デルタ反復]オプションを使用すると、Secure Agentでは、変更ドキュメントでキャプチャされるレコードだけを抽出します。
よって、フル抽出または転送ありのデルタ初期化を実行した後に、デルタ反復セッションを実行した場合、抽出されたレコードのカウントが[フル]または[転送ありのデルタ初期化]オプションによって抽出されたレコードの数と一致しなくなる可能性があります。