
たとえば、一部の製品データをロードする必要があるとします。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 対多の場合に複数の行が一致する場合に、返品規定を制御できます (例:最も古いまたは最も新しい日付フィールドの最小/最大)
- より高度なキャッシュオプションを選択できます。
注記