Platform トランスフォームを使用したデータのクエリ

lookup 関数と結合操作の選択

Objective

After completing this lesson, you will be able to lookup 関数と Join 演算のどちらかを選択

Lookup 関数

たとえば、一部の製品データをロードする必要があるとします。2 つのソーステーブルがあります。1 つは製品テキスト情報 (ラベルおよびカテゴリ) を含み、もう 1 つは割引情報 (割引日付および割引率) を含むテーブルです。どちらも、製品 ID を使用して製品を識別します。

すべての製品テキストと割引率 (存在する場合) を含むターゲットテーブルにデータをロードします。

このロードは、外部結合を実行する Query トランスフォームで実行できます。ただし、これらの商品には、割引なしの NULL 値があります。

また、複数の割引が適用されている製品についてはどうでしょうか。ジョブで重複キーの挿入が失敗します。

このシナリオでは、lookup 関数が目標の達成に役立ちます。

Lookup 関数

lookup 関数は、で指定した値を使用して、ファイルまたは異なるテーブル内の対応する値を検索します。具体的には、compare_column の値がの値と一致する lookup_table の行が検索されます。この関数は、この一致するローから result_column 値を返します。

以下に例を示します。

ただし、一致する行が複数ある場合は、どうなりますか。

複数一致行の処理

  • 標準の RDBMS テーブルの場合、lookup 関数は result_columnに最大値を持つ一致する行を見つけ、その値を返します。

  • SAP アプリケーションテーブルまたはフラットファイルの場合、lookup 関数は一致する行をランダムに選択し、その行の result_column の値を返します。

高度な検索関数

検索プロセスで返される一致行をさらに制御するには、lookup_ext 関数または lookup_seq 関数を使用します。

すべての lookup 関数は、ソースの各行に対して 1 つの行を返しますが、複数の一致する行のうち、どれを返すかを選択する方法が異なります。

  • 検索では、検索式の追加オプションは提供されません。
  • lookup_ext を使用して、order by 列および戻り値のポリシー (たとえば、min または max) を指定して、特定のフィールドの最小値または最大値のレコードを返します。
  • 一致するレコードで lookup_seq を使用して、シーケンス列 (effective_date など) が指定したシーケンス値 (トランザクション日付など) に最も近く、かつそれよりも大きくないレコードからフィールドを返します。

結合とルックアップの比較

2 つの解決策をまとめて比較してみましょう。

結合の使用

  • ファイルに結合できます (ファイル形式を使用)
  • 結合は、データベースサーバが実行できます (テーブルの場合のみ)。
  • ソースから複数の値を返すことができます (例: 名および姓)
  • 内部結合または左外部結合を実行できます。
  • 外部結合の不一致値は常に NULL です。
  • キャッシュの設定をオンまたはオフのいずれかにできます (例: テーブル全体またはなし)。

ルックアップの使用

  • データフローで必要なオブジェクトが少なくなります (煩雑さが軽減されます)。
  • インポートされたテーブルのみを使用することができます (テンプレートテーブルもファイル形式も使用不可)。
  • 検索は Job Server で実行されます。
  • 1 つの値のみを返すことができます (Lookup_ext を使用して、参照テーブルから複数の列を返すことができます)。
  • 左外部結合のみを実行できますが、デフォルト値を設定する機能 (例: Null 以外)
  • 1 対多の場合に複数の行が一致する場合に、返品規定を制御できます (例:最も古いまたは最も新しい日付フィールドの最小/最大)
  • より高度なキャッシュオプションを選択できます。

注記

Data Services では、キャッシュ内の参照テーブルのレコードを使用して、参照ジョブのパフォーマンスを改善することができます。キャッシュ方式は、キャッシュの仕様によって異なります。キャッシュオプションの詳細については、Lookup 関数のキャッシュソース | SAP Help Portal を参照してください。