SAP Data Services の説明
データへのアクセス
ジョブおよびデータフローの開発
バッチジョブのトラブルシューティング
関数、スクリプト、変数の使用
Platform トランスフォームを使用したデータのクエリ
Platform トランスフォームによるデータの分割と結合
エラーの処理と障害からのリカバリ
データ更新
SAP Data Services インテグレータトランスフォームを使用した高度な ETL シナリオの設計
パフォーマンスの最適化

ターゲットテーブルへの変更の取得

Objective

After completing this lesson, you will be able to 時間の経過とともにゆっくり変化するデータの更新

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

定期的に更新するデータが大量にあり、スケジュールされたメンテナンスのためにシステムのダウンタイムが少なくなった場合は、デルタロードまたは時間の経過に伴うデータの更新に最適な方法を選択する必要があります。

完全リフレッシュおよび変更済データキャプチャ

データの完全リフレッシュを実行するか、または新規または変更されたデータのみを抽出して対象システムを更新するかを選択することができます。

  • 完全リフレッシュ:

    完全リフレッシュは実装が容易で、管理も容易です。このメソッドにより、技術エラーやプログラミングエラーによってデータが見落とされたり除外されたりすることがなくなります。完全リフレッシュを使用して、管理可能な量のソースデータがある環境で対象システムへのデルタロードを実行します。

  • 変更済データキャプチャ:

    初期ロードが完了すると、新規または変更されたデータのみを抽出し、対象システムを更新することができます。変更されたデータのみの識別とロードは、変更データキャプチャ (CDC) と呼ばれます。大きなテーブルには CDC が推奨されます。

変更されたデータキャプチャの利点

  • 抽出、変換、およびロードするデータが少ないため、ジョブの処理時間が短縮されるため、パフォーマンスが向上します。
  • 対象システムでは、時間の経過とともにデータを正しく分析できるように、変更履歴を追跡することができます。

Data Services 内で完全な CDC ソリューションを設定する必要がない場合があります。現在、Oracle、SQL Server、DB2、SAP Sybase など、多くのデータベースに CDC サポートが組み込まれています。詳細については、Designer ガイド (https://help.sap.com/docs/SAP_DATA_SERVICES/ec06fadc50b64b6184f835e4f0e1f52f/572111656d6d1014b3fc9283b0e91070.html?) を参照してください。locale=en-US&q=preload%20sql

完全な CDC ソリューションを設定する場合は、ソースベースの CDC またはターゲットベースの CDC (もしくはその両方) を選択できます。

CDC ソリューション

  • ソースベースの CDC は、ソーステーブルを評価して変更内容を特定し、変更された行のみを抽出してターゲットテーブルにロードします。
  • パフォーマンス上の理由から、ソースベースの CDC はターゲットベースの CDC よりも望ましいです。
  • 一部のソースシステムは、ソースベースの CDC 技術を利用するのに十分な情報を提供していません。
  • ターゲットベースの CDC は、ソースからすべてのデータを抽出し、Table Comparison トランスフォームを使用してソース行とターゲット行を比較してから、変更された行のみをターゲットにロードします。
  • ソースベースの手法とターゲットベースの手法を組み合わせて使用することができます。

履歴保存

データの更新時に、変更を追跡するかどうかを決定する必要があります。

データ変更管理

データ変更を管理する方法は 3 つあります。

  • 履歴保存なし
  • 限られた履歴の維持
  • 無制限の履歴保持

履歴保存なし

履歴を保持する必要がない場合は、変更された行を更新するだけです。

次の例は、変更を追跡せずに、営業担当名を更新します。

データ変更前のターゲットテーブル

このテーブルには、変更前のデータが表示されます。

SALES_PERSON_IDNAMESALES_TEAM
000120Doe、John BNorthwest

データ変更後のターゲットテーブル (履歴なし)

次の表に、販売担当者の名前が変更されたときのデータを示します。

SALES_PERSON_IDNAMESALES_TEAM
000120スミス、ジョン BNorthwest

履歴保存 (制限あり)

変更を追跡する必要があるものの、すべての履歴値を格納しない場合は、更新可能なカラムごとに 2 つのフィールド (新しい値を記録するフィールドと変更の日付を記録するフィールド) を追加する必要があります。

  • 新旧や最初と最後など、属性ごとに 1 つの変更のみを保持することができます。
  • 各変更には、属性ごとに少なくとも 1 つの追加項目が必要であり、変更日付を記録する場合はもう 1 つの追加項目が必要です。
  • テーブルの構造には必要なデータがすべて含まれていますが、特定の情報を抽出するために必要な SQL コードは複雑になる可能性があります。

制限付き履歴保存ではデータに変更を保存できますが、複数の変更に対応したり、サマリレポートのニーズを適切に処理したりすることはできません。

以下の例は、営業チームの値を保持する、制限された履歴の実装を示しています。

データ変更前のターゲットテーブル

このテーブルには、変更前のターゲットテーブルのデータが表示されます。

SALES_PERSON_IDNAMESALES_TEAMOLD_TEAMEFF_TO_DATE
000120スミス、ジョン・B。NorthwestNULLNULL

履歴が限定されたデータ変更後のターゲットテーブル

この表は、営業員の営業チームが変更されたことを示しています。

SALES_PERSON_IDNAMESALES_TEAMOLD_TEAMEFF_TO_DATE
000120スミス、ジョン・B。南東部NorthwestOct_31_2004

無制限履歴保存

無制限履歴保持により、データ変更管理に関連するほとんどの問題が解決されます。

  • 重要な変更に対して新しい行を生成します。
  • 一意のキーを使用する必要があります。
  • オプションで、Effective_Date 項目、または 2 つの Valid_From 項目と Valid_To 項目を追加します。
  • 任意で [IsActive] フィールドを追加します。

    その後、IsActive = Y でフィルタリングして、現在の行と期限切れの行を表示できます。

履歴を保持するには、単一のエンティティ (得意先や従業員など) に対して複数のレコードがテーブルにある場合に発生するターゲットテーブルの制約問題を管理する必要があります。

たとえば、販売レコードでは、営業員 ID が一次キーであり、そのレコードを営業員のすべての受注にリンクするために使用されます。同じ一次キーで新規レコードを追加しようとすると、例外が発生します。一方、新しい営業員 ID をその代表者の新しいレコードに割り当てると、営業員の総売上を正確にレポートする能力が損なわれます。

この問題に対処するには、サロゲートキーをターゲットテーブルの新しい列として作成します。サロゲートキーは、レコードの新しいプライマリキーになります。同時に、以前の一次キーのプロパティを単にデータ列になるように変更します。

同じ代理人の新規レコードが挿入されると、一意の代理キーが割り当てられます。これにより、営業員 ID を引き続き使用して、営業員の受注へのリンクを維持することができます。

データ変更前のターゲットテーブル

このテーブルには、変更前のデータが表示されます。

SALES_PERSON_KEYSALES_PERSON_IDNAMESALES_TEAM
15000120Doe、John BNorthwest

データ変更後のターゲットテーブル

無制限の履歴を保持を実装すると、この表に示されているように 2 つのレコードが表示されます。

SALES_PERSON_KEYSALES_PERSON_IDNAMESALES_TEAM
15000120Doe、John BNorthwest
133000120Doe、John B南東部

ターゲットテーブルの更新

SAP Data Services では、データセット内の各行に、行のステータスを識別する操作コードで内部的にフラグが設定されます。

以下の表では、各操作コードの取得方法と、Data Services で操作コードを使用して行が処理される方法について説明します。

処理コードの説明

操作コードは、データセットの各行がターゲットテーブルにどのように適用されるかを示します。オペレーションコードは以下のとおりです。

操作コードコンテキスト結果
標準ソースから抽出された行。ターゲットに新しい行を作成します。
INSERTデータセット内の行は、同じデータセットの以前のイメージと比較して追加されています。ターゲットに新しい行を作成します。
UPDATEデータセット内の行は、同じデータセットの以前のイメージと比較して変更されました。ターゲット内の既存の行を上書きします。
DELETEデータセット内の行は、同じデータセットの以前のイメージと比較して削除されました。ターゲットからローを削除します。

ほとんどのトランスフォームは、NORMAL というフラグが付けられた行でのみ動作します。たとえば、Query トランスフォームでは常に NORMAL オペレーションコードを含む行が出力されます。

注記

この操作コードは、ターゲットテーブルに insert 文を生成します。ただし、ターゲットで auto correct load オプションが設定されている場合は、実際のアクションが更新になる可能性があります。

Table_Comparison トランスフォームは 2 つのデータセットを比較するために使用され、INSERT、UPDATE、または DELETE 操作コードを生成できます。

History_Preserving トランスフォームを使用して、たとえば、更新に対する更新を挿入および削除に変更することができます。

もう 1 つのトランスフォームを使用して、オペレーションコードを変更できます。Map_Operation トランスフォームです。

Map Operation トランスフォームの概要

Map_Operation トランスフォームでは、データセットの操作コードを変更して、必要な出力を生成することができます。たとえば、入力データセット内の行がデータフローの以前の操作で更新された場合、このトランスフォームを使用して UPDATE 操作を INSERT にマップします。その結果、ターゲット内の既存の行を保持するために、UPDATE 行を INSERT 行に変換できます。

Map Operation トランスフォーム

図に示すように、Map Operation トランスフォーム:

  • 操作コードを明示的に上書きします。
  • 特定のオペレーションコードを持つ行を破棄できる
  • 後続のトランスフォームの互換性と、ターゲットへの書き込みの制御に使用されます。

Map Operation トランスフォームの入力は、任意のオペレーションコードでフラグが付けられた行を含むデータセットです。

Map Operation トランスフォームでは、入力データセットに必要な新しい操作を示すために、出力行タイプオプションの設定が有効になります。オペレーションコード INSERTUPDATEDELETENORMAL、または DISCARD から選択します。

例:

オプションで、行タイプごとに列ごとにマッピング式を記述することができます。

式のマッピング

列および行データ型ごとにマッピング式を書き込むと (INSERT/UPDATE/DELETE)、以下を実行することができます。

  • 列のデータの値を変更します。
  • 入力行タイプに基づいて、列に対して異なる式を実行します。
  • before_image 関数を使用して、UPDATE 行の前のイメージの値にアクセスします。

たとえば、販売出荷元からデータをロードしたり、挿入を更新に変更したり、受注 STATUS 列の値を 'DELIVERED' に変更したりすることができます。