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には次のカラムが含まれます。
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カラムの値を設定します。• PREV_DATカラムとPREV_TIMカラムの値を初期化して設定します。このオプションは、データを抽出せずに、後続のデルタ抽出のために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トでは、以下の作業が実行されます。
• LAST_UPDATED_DATカラムとLAST_UPDATED_TIMカラムを設定します。• PREV_DATとPREV_TIMを初期化します。• SAPテーブルに存在するすべてのデータを抽出します。このオプションは、すべてのレコードをSAPテーブルから抽出して最初のデータセットを構築し、続けてデルタ更新セッションを実行して、変更されたデータをキャプチャする場合に使用します。
デルタ更新 [デルタ更新] オプションを選択すると、Secure Agentでは前回のデータ抽出以降に変更されたデータを抽出します。
Secure Agentトでは、以下の作業が実行されます。
• LAST_UPDATED_DATカラムとLAST_UPDATED_TIMカラムから現在の日付と時刻までのレコードを抽出します。• 値をカラムLAST_UPDATED_DATおよびLAST_UPDATED_TIMからそれぞれPREV_DATおよびPREV_TIMに移動します。• カラムLAST_UPDATED_DATおよびLAST_UPDATED_TIMの値を現在の日付と時刻に更新します。このオプションは、前回のデータ抽出以降に変更されたデータのみを読み取る場合に使用します。
差分更新セッションを実行する前に、転送ありの差分初期化または転送なしの差分初期化を実行する必要があります。デルタ初期化を実行すると、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つを使用します。
- 0 。フルで使用します。- 1 。転送なしのデルタ初期化で使用します。- 2 。転送ありのデルタ初期化で使用します。- 3 。デルタ更新で使用します。- 4 。デルタ反復で使用します。次の形式を使用してパラメータ名とパラメータ値を指定します。
$$<パラメータ名>=<パラメータ値>
パラメータ名とパラメータ値の指定時にはスペース文字を使用しないでください。
例えば、次のように入力します。$$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テーブルでのみ実行できます。2つ以上のSAPテーブルのデータを結合する場合にネイティブ結合を使用することはできません。• SAPテーブルからデータを参照する差分抽出を設定することはできません。• パーティション化を伴う差分抽出を設定することはできません。• 同じマッピング内の複数のパイプラインに差分抽出を設定することはできません。• Secure Agentでデルタ抽出を実行する際、SAPテーブルで挿入されたか更新されたレコードを同じ順序では取得しません。例えば、レコード10がSAPテーブルで1番目に、レコード20より前に更新されています。しかし、データを抽出する際、Secure Agentでは、まずレコード20、それからレコード10をフェッチする可能性があります。• Secure Agentでは、デルタ抽出経由で抽出されたレコードがSAPでの挿入または更新操作の一部であるかどうかを示す情報をセッションログに出力しません。• デルタ抽出中、現在の日時と最終更新日時の間に複数のエントリがある場合、Secure Agentはキーの最新のエントリのみを取得します。例えば、SAPのテーブルCustomerにレコードが挿入されたとします。その顧客名は「John 」に設定しています。その後でレコードが更新され、名前が「Bill 」に変更されました。Secure Agentでは名前の値を「Bill 」のみフェッチします。
• 差分抽出マッピングでQUANおよびCURRデータ型を使用することはできません。• データ転送 タスクで差分抽出を設定することはできません。• 挿入または更新された差分レコードをターゲットテーブルに取得するには、ターゲットトランスフォーメーションで操作として[更新/挿入] を選択し、更新モードとして[更新しない場合は挿入] を選択します。このように設定しない場合、ターゲットでデータ破損が発生します。SAPテーブルリーダーマッピング向けデルタ抽出の設定 SAPテーブルリーダーマッピング向けにデルタ抽出を設定するには、使用する更新モードを選択し、必要に応じてマッピングのパラメータを定義します。
1 SAPテーブルからデータを読み取りターゲットにデータを書き込むマッピングを作成します。
2 マッピングで[ソーストランスフォーメーション]をクリックします。
3 [プロパティ] パネルで、 [ソース] タブをクリックします。
4 詳細プロパティで、 [更新モード] リストから次のいずれかの値を選択します。
- 0 - フル - 1 - 転送なしのデルタ初期化 - 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では、変更ドキュメントでキャプチャされるレコードだけを抽出します。
よって、フル抽出または転送ありのデルタ初期化を実行した後に、デルタ反復セッションを実行した場合、抽出されたレコードのカウントが[フル] または[転送ありのデルタ初期化] オプションによって抽出されたレコードの数と一致しなくなる可能性があります。