トランスフォーメーション > ルックアップトランスフォーメーション > 動的ルックアップキャッシュ
  

動的ルックアップキャッシュ

動的ルックアップキャッシュを使用してルックアップキャッシュがターゲットに同期し続けるようにします。
ルックアップキャッシュを有効にすると、マッピングタスクは、最初のルックアップ要求を処理するときにルックアップキャッシュをビルドします。キャッシュは、静的または動的にできます。キャッシュが静的の場合、ルックアップキャッシュ内のデータは、マッピングタスクの実行時に変更されません。タスクがキャッシュを複数回使用する場合、タスクは同じデータを使用します。キャッシュが動的の場合、タスクはタスク内のアクションに基づいてキャッシュを更新します。このためタスクがルックアップを複数回使用する場合、ダウンストリームトランスフォーメーションは更新されたデータを使用できます。
動的キャッシュはほぼすべてのタイプのルックアップソースに使用できます。フラットファイルまたはSalesforceルックアップに動的キャッシュを使用することはできません。特定のタイプのルックアップソースで動的キャッシュを使用する方法に関する詳細については、該当するコネクタのヘルプを参照してください。
ルックアップクエリの結果、行タイプ、ルックアップトランスフォーメーションのプロパティに基づいて、マッピングタスクは、ソースから行を読み取るときに、動的ルックアップキャッシュに以下のアクションのいずれかを実行します。
キャッシュに行を挿入
キャッシュに行がない場合、マッピングタスクは行を挿入します。マッピングタスクは、行に挿入のフラグを設定します。
キャッシュ内の行を更新
キャッシュに行が存在する場合、マッピングタスクは行を更新します。マッピングタスクは、入力フィールドに基づいてキャッシュ内の行を更新します。マッピングタスクは、行に更新行のフラグを設定します。
キャッシュに変更を加えない
キャッシュに行があり変更がない場合、マッピングタスクは変更を行いません。マッピングタスクは、行に変更なしのフラグを設定します。
動的ルックアップトランスフォーメーションには、タスクがキャッシュ内の各行に行った変更を示す戻りフィールド、NewLookupRowが含まれます。NewLookupRowの値に基づいて、動的ルックアップトランスフォーメーションとともにルータトランスフォーメーションまたはフィルタトランスフォーメーションを設定して、挿入行または更新行をターゲットテーブルにルーティングできます。変更のない行を別のターゲットテーブルやフラットファイルにルーティングしたり、それらを削除したりできます。
パラメータ化されたソース、ターゲット、またはルックアップを、動的キャッシュを使用するルックアップトランスフォーメーションとともに使用することはできません。

静的ルックアップと動的ルックアップの比較

ソースに重複するプライベートキーが含まれている場合、静的キャッシュではなく動的キャッシュを使用する必要があります。また、ソースにパフォーマンスを最適化するための大きなデータテーブルが含まれている場合も、動的キャッシュを使用する必要があります。
データ統合は、ルックアップトランスフォーメーションを設定して静的または動的キャッシュを使用するかどうかに基づいて、異なるルックアップ条件で処理を行います。
次の表で、静的キャッシュを使用したルックアップトランスフォーメーションと動的キャッシュを使用したルックアップトランスフォーメーションを比較します。
静的ルックアップキャッシュ
動的ルックアップキャッシュ
タスクの実行中は、キャッシュは変更されません。
タスクでは、行をターゲットに渡すときに、キャッシュに行を挿入またはキャッシュ内の行を更新します。
ルックアップには、フラットファイル、リレーショナルデータベース、およびSalesforceのようなその他の接続タイプを使用できます。
フラットファイルまたはSalesforce接続タイプは使用できません。
ルックアップ条件がTrueの場合、タスクはルックアップテーブルまたはキャッシュから値を返します。
条件がtrueではない場合、タスクはデフォルト値を返します。
ルックアップ条件がtrueの場合、タスクはキャッシュおよびターゲット内の行を更新するか、またはキャッシュを変更せずにそのままとします。これは、キャッシュおよびターゲットテーブルに行があることを示しています。
ルックアップ条件がtrueではない場合、タスクはキャッシュおよびターゲットに行を挿入するか、または行タイプに基づいてキャッシュを変更せずにそのままとします。これは、キャッシュまたはターゲットテーブルに行がなかったことを示しています。

動的キャッシュの更新

マッピングタスクは、ルックアップクエリの結果および定義したルックアップトランスフォーメーションのプロパティに応じて、行を読み込む際にルックアップキャッシュを変更します。マッピングタスクは、実行するアクションを示すNewLookupRow戻りフィールドに値を割り当てます。
以下の表に、有効なNewLookupRow値を示します。
NewLookupRow値
説明
0
マッピングタスクではキャッシュ内の行の更新、またはキャッシュへの行の挿入が行われません。
1
マッピングタスクはキャッシュに行を挿入します。
2
マッピングタスクはキャッシュ内の行を更新します。
ダウンストリームトランスフォーメーションでNewLookupRow値を使用できます。

挿入行の挿入と更新

マッピングタスクが、挿入行のキャッシュへの挿入と更新を処理する方法を設定できます。行タイプが挿入の場合に動的ルックアップキャッシュの既存の行を更新するには、トランスフォーメーションの[挿入でなければ更新]の詳細プロパティを有効にします。
注: このプロパティは、行タイプが「挿入」で、ルックアップトランスフォーメーションに入力される行に対して使用します。更新行などの他のタイプの行がルックアップトランスフォーメーションに入力される場合、[挿入でなければ更新]プロパティはマッピングタスクの行の処理方法に影響しません。
[挿入でなければ更新]プロパティを選択し、ルックアップトランスフォーメーションに入力される行のタイプが「挿入」の場合、マッピングタスクは、行が新規行のときはキャッシュに挿入します。インデックスキャッシュに行が存在する場合であってもデータキャッシュが現在の行と異なる場合は、マッピングタスクはデータキャッシュで行を更新します。
[挿入でなければ更新]を有効にせず、ルックアップトランスフォーメーションに入力される行のタイプが「挿入」の場合、マッピングタスクは、行が新規行のときはキャッシュに挿入し、すでに存在する行のときはキャッシュを変更しません。
以下の表に、ルックアップトランスフォーメーションに入力される行のタイプが「挿入」の場合に、マッピングタスクがルックアップキャッシュを変更する方法を示します。
[挿入でなければ更新]オプション
キャッシュ内で行が見つかったか
データキャッシュが異なるか
ルックアップキャッシュの結果
NewLookupRow値
無効 - 挿入のみ
-
変更なし
0
無効 - 挿入のみ
×
-
挿入
1
有効
はい
更新
2
有効
×
変更なし
0
有効
×
-
挿入
1

動的キャッシュおよびルックアップソースの同期

ルックアップトランスフォーメーションでは、ターゲットに渡した行を追跡するために、動的ルックアップキャッシュが保持されます。複数のタスクが同じターゲットを更新する場合は、各タスクのルックアップトランスフォーメーションを設定して、ターゲットではなく同じルックアップソースに動的ルックアップキャッシュを同期させることができます。
キャッシュをルックアップソースと同期させるには、ルックアップトランスフォーメーションの[動的キャッシュの同期]プロパティを有効にします。
キャッシュがルックアップソースと同期するようにルックアップトランスフォーメーションを設定すると、ルックアップトランスフォーメーションはルックアップソース上でルックアップを実行します。ルックアップソース内にデータが存在しない場合、ルックアップトランスフォーメーションは動的ルックアップキャッシュを更新する前にルックアップソースに行を挿入します。
別のタスクで行が挿入された場合には、ルックアップソース内にデータが存在する可能性があります。ルックアップキャッシュをルックアップソースに同期させるために、タスクはルックアップソースから最新の値を取得します。ルックアップトランスフォーメーションはルックアップソースから取得した値を動的ルックアップキャッシュに挿入します。
例えば、複数のタスクが同時に実行されているとします。各タスクは新しい製品名の製品番号を生成します。あるタスクが製品番号を生成した場合、他のタスクは同じ製品番号を使用してその製品を識別する必要があります。製品番号は1回生成され、ルックアップソースに挿入されます。その製品を含む行を別のタスクが処理する場合は、ルックアップソース内の製品番号を使用する必要があります。各タスクはルックアップソース上でルックアップを実行し、すでに生成されている製品番号を特定します。
キャッシュがルックアップソースと同期するようにルックアップトランスフォーメーションを設定すると、タスクは挿入行の動的ルックアップキャッシュ上でルックアップを実行します。動的ルックアップキャッシュ内にデータが存在しない場合、タスクはルックアップソース上でルックアップを実行します。次のいずれかのタスクを完了します。
ルックアップソースには、ルックアップキャッシュと同じフィールドがあります。カラムがルックアップトランスフォーメーションから射影されるか、フィールドがルックアップ条件の一部でない限り、タスクがルックアップキャッシュに行を挿入することはありません。

動的キャッシュおよびターゲットの同期

ダウンストリームトランスフォーメーションを設定して、動的ルックアップキャッシュとターゲットが同期するようにします。
動的ルックアップキャッシュを使用すると、マッピングタスクはルックアップキャッシュに書き込んでからターゲットテーブルに書き込みます。タスクがデータをターゲットに書き込まない場合、ルックアップキャッシュとターゲットテーブルは非同期になります。例えば、ターゲットデータベースはデータを拒否することがあります。
ルックアップキャッシュがルックアップテーブルに同期し続けるようにするには、次のガイドラインに従います。

フィールドマッピング

動的ルックアップキャッシュを使用するときは、[フィールドマッピング]タブで受信フィールドをルックアップキャッシュフィールドにマッピングします。[フィールドマッピング]タブは、動的キャッシュを使用するようにルックアップトランスフォーメーションを設定するときのみ使用できます。
動的キャッシュを使用するときはすべての受信フィールドをマッピングして、タスクの実行時にキャッシュを更新できるようにする必要があります。必要に応じて、ターゲットオブジェクトのフィールドに対して生成されたキーを作成する場合は、受信フィールドの代わりにシーケンスIDフィールドをマッピングできます。

生成されたキーフィールド

動的ルックアップキャッシュを設定すると、ターゲットオブジェクトのフィールド用に生成キーを作成できます。
ターゲットオブジェクトのフィールド用に生成されたキーを作成するには、シーケンスIDフィールドを[フィールドマッピング]タブのルックアップキャッシュフィールドにマッピングします。受信フィールドの代わりにシーケンスIDフィールドを、整数またはBigintデータ型のキャッシュフィールドにマッピングできます。整数ルックアップフィールドの場合、生成キーの最大値は2,147,483,647です。Bigintルックアップフィールドの場合、生成キーの最大値は9,223,372,036,854,775,807です。
シーケンスIDフィールドをマッピングすると、データ統合では、ルックアップキャッシュに行を挿入するときにキーが生成されます。
データ統合は、次のプロセスを使用してシーケンスIDを生成します。
  1. 1データ統合が動的ルックアップキャッシュを作成するときは、動的ルックアップキャッシュ内のシーケンスIDのあるフィールドごとに値の範囲を追跡します。
  2. 2データ統合がデータの行をキャッシュに挿入するときは、最大のシーケンスIDの値に1を加えることでフィールドのキーを生成します。
  3. 3データ統合は、生成されるシーケンスIDの最大値に達すると、再び1から生成を開始します。そして、データ統合は、既存の最小値から1を引いた値に達するまで、各シーケンスIDに1を加え続けます。データ統合で一意のシーケンスID番号が不足すると、マッピングタスクは失敗します。
データ統合は、キャッシュに挿入する行ごとにシーケンスIDを生成します。

比較でのフィールドの無視

動的ルックアップキャッシュを使用する場合、データ統合が関連する受信フィールドの値とルックアップフィールドの値を比較する際にフィールドを無視するように設定できます。比較で一部のフィールドを無視すると、マッピングのパフォーマンスを向上できます。
動的ルックアップキャッシュを使用するマッピングを実行すると、デフォルトでは、データ統合は関連する受信フィールドの値とすべてのルックアップフィールドの値を比較します。データ統合はこれらの値を比較することで、ルックアップキャッシュ内の行を更新するかどうかを決定します。受信フィールドの値がルックアップフィールドの値と異なる場合、データ統合はキャッシュ内の行を更新します。
比較する必要がないフィールドがある場合は、フィールドを比較するときにデータ統合に無視させるフィールドを選択できます。例えば、更新する必要のあるデータが行に含まれているかどうかを示すカラムがソースデータに含まれているとします。キャッシュおよびターゲットテーブル内の行を更新するかどうかを示しているフィールド以外のすべてのルックアップフィールドについて[比較で無視する]プロパティを有効にします。
フィールドを無視するための設定は、ルックアップトランスフォーメーションの[戻りフィールド]タブで行います。フィールドを無視するには、そのフィールドについて[比較で無視する]プロパティを有効にします。
ルックアップ条件にすべてのルックアップフィールドが含まれていない限り、少なくとも1つのフィールドを比較するようにトランスフォーメーションを設定する必要があります。

動的ルックアップクエリのオーバーライド

動的キャッシュを使ってルックアップトランスフォーメーションにWHERE句を追加する場合、フィルタトランスフォーメーションをルックアップトランスフォーメーションの前に接続して、キャッシュまたはターゲットテーブルに挿入しない行をフィルタリングします。フィルタトランスフォーメーションを含めない場合、キャッシュとターゲットテーブルの間で結果に矛盾が生じる可能性があります。
たとえば、Lookupトランスフォーメーションを設定して従業員テーブルのEMPに対して動的ルックアップを行い、EMP_IDで一致する行を探すとします。下記のルックアップSQL上書きを定義します。
SELECT EMP_ID, EMP_STATUS FROM EMP ORDER BY EMP_ID, EMP_STATUS WHERE EMP_STATUS = 4
最初にマッピングを実行する際、マッピングタスクはルックアップSQLオーバーライドに基づいてターゲットテーブルからルックアップキャッシュを作成します。キャッシュ内のすべての行はWHERE句の条件、EMP_STATUS = 4に一致します。
マッピングタスクは指定したルックアップ条件に一致するソース行を読み取りますが、EMP_STATUSの値は2です。ターゲットにEMP_STATUSが2の行がある可能性があっても、マッピングタスクはSQLオーバーライドのため、キャッシュの行を見つけることができません。マッピングタスクはキャッシュに行を挿入して、行をターゲットテーブルに渡します。行がすでに存在する場合、マッピングタスクがこの行をターゲットテーブルに挿入すると、結果に矛盾が生じる可能性があります。さらに、キャッシュ内のすべての行がSQLオーバーライドのWHERE句の条件に一致するとは限りません。
WHERE句に一致する行のみを確実にキャッシュに挿入するには、フィルタトランスフォーメーションをルックアップトランスフォーメーションの前に追加し、ルックアップSQL上書きでWHERE句内の条件をフィルタ条件として定義します。
次のフィルタトランスフォーメーションのフィルタ条件とSQLオーバーライドのWHERE句を入力します。
EMP_STATUS = 4