マッピング データ フローでの参照変換Lookup transformation in mapping data flow

適用対象: Azure Data Factory Azure Synapse Analytics

参照変換を使用して、データ フロー ストリーム内の別のソースからデータを参照します。Use the lookup transformation to reference data from another source in a data flow stream. 参照変換では、一致したデータの列がソース データに追加されます。The lookup transformation appends columns from matched data to your source data.

参照変換は、左外部結合と似ています。A lookup transformation is similar to a left outer join. プライマリ ストリームのすべての行が出力ストリームに存在し、それに参照ストリームからの列が追加されます。All rows from the primary stream will exist in the output stream with additional columns from the lookup stream.

構成Configuration

スクリーンショットには、次のテキストで説明されているラベルを含む [参照設定] タブが示されています。Screenshot shows the Lookup settings tab with the labels described in the following text.

[Primary stream](プライマリ ストリーム): データの受信ストリーム。Primary stream: The incoming stream of data. このストリームは、結合の左側に相当します。This stream is equivalent to the left side of a join.

[Lookup stream](参照ストリーム): プライマリ ストリームに追加されるデータ。Lookup stream: The data that is appended to the primary stream. どのデータが追加されるかは、参照条件によって決まります。Which data is added is determined by the lookup conditions. このストリームは、結合の右側に相当します。This stream is equivalent to the right side of a join.

[Match multiple rows](複数の行の一致): 有効にすると、プライマリ ストリームに複数の一致がある行で、複数の行が返されます。Match multiple rows: If enabled, a row with multiple matches in the primary stream will return multiple rows. それ以外の場合は、[Match on](一致対象) 条件に基づいて 1 行だけが返されます。Otherwise, only a single row will be returned based upon the 'Match on' condition.

[Match on](一致対象): [Match multiple rows](複数の行の一致) が選択されていない場合にのみ表示されます。Match on: Only visible if 'Match multiple rows' is not selected. 任意の行、最初の一致、または最後の一致のいずれと一致するかを選択します。Choose whether to match on any row, the first match, or the last match. 実行が最も速いので、任意の行をお勧めします。Any row is recommended as it executes the fastest. 最初の行または最後の行を選択する場合は、並べ替え条件を指定する必要があります。If first row or last row is selected, you'll be required to specify sort conditions.

[Lookup conditions](参照条件): 一致対象の列を選択します。Lookup conditions: Choose which columns to match on. 等値条件が満たされた場合、行は一致と見なされます。If the equality condition is met, then the rows will be considered a match. データ フロー式言語を使用して値を抽出するには、ポイントして [Computed column](計算列) を選択します。Hover and select 'Computed column' to extract a value using the data flow expression language.

両方のストリームのすべての列が、出力データに含まれます。All columns from both streams are included in the output data. 重複する列または不要な列を削除するには、参照変換の後に選択変換を追加します。To drop duplicate or unwanted columns, add a select transformation after your lookup transformation. シンク変換で列を削除したり、名前を変更したりすることもできます。Columns can also be dropped or renamed in a sink transformation.

非等結合Non-equi joins

参照条件で等しくない (!=) またはより大きい (>) などの条件演算子を使用するには、2 つの列の間の演算子ドロップダウンを変更します。To use a conditional operator such as not equals (!=) or greater than (>) in your lookup conditions, change the operator dropdown between the two columns. 非等結合では、 [最適化] タブで [固定] ブロードキャストを使用して、2 つのストリームのうち少なくとも 1 つをブロードキャストする必要があります。Non-equi joins require at least one of the two streams to be broadcasted using Fixed broadcasting in the Optimize tab.

非等参照Non-equi lookup

一致した行の分析Analyzing matched rows

参照変換の後で、isMatch() 関数を使用して、参照が個々の行と一致したかどうかを確認できます。After your lookup transformation, the function isMatch() can be used to see if the lookup matched for individual rows.

参照パターンLookup pattern

このパターンの例は、条件分割変換を使用して isMatch() 関数で分割する場合です。An example of this pattern is using the conditional split transformation to split on the isMatch() function. 上記の例では、一致する行が上のストリームを進み、一致しない行は NoMatch ストリームを進みます。In the example above, matching rows go through the top stream and non-matching rows flow through the NoMatch stream.

参照条件のテストTesting lookup conditions

デバッグ モードでデータ プレビューを使用して参照変換のテストを行う場合は、小さな既知のデータ セットを使用してください。When testing the lookup transformation with data preview in debug mode, use a small set of known data. 大きなデータセットから行をサンプリングすると、テストでどの行とキーが読み取られるのかを予測できなくなります。When sampling rows from a large dataset, you can't predict which rows and keys will be read for testing. 結果が確定的なものとならず、結合条件で一致するものが返されなくなる可能性があります。The result is non-deterministic, meaning that your join conditions may not return any matches.

ブロードキャストの最適化Broadcast optimization

ブロードキャスト結合Broadcast Join

結合変換、参照変換、および存在変換では、一方または両方のデータ ストリームがワーカー ノードのメモリに収まる場合、ブロードキャスト を有効にすることでパフォーマンスを最適化できます。In joins, lookups and exists transformation, if one or both data streams fit into worker node memory, you can optimize performance by enabling Broadcasting. 既定では、ある一方をブロードキャストするかどうかは、Spark エンジンによって自動的に決定されます。By default, the spark engine will automatically decide whether or not to broadcast one side. ブロードキャストする側を手動で選択するには [Fixed](固定) を選択します。To manually choose which side to broadcast, select Fixed.

Off オプションを使用してブロードキャストを無効にすることは、タイムアウト エラーが発生していない限り推薦されません。It's not recommended to disable broadcasting via the Off option unless your joins are running into timeout errors.

キャッシュされた参照Cached lookup

同じソースに対して複数の小さい参照を実行する場合、キャッシュされたシンクと参照は、参照変換よりも適切なユース ケースである可能性があります。If you're doing multiple smaller lookups on the same source, a cached sink and lookup maybe a better use case than the lookup transformation. キャッシュ シンクがより適切な一般的な例としては、データ ストアで最大値を検索することや、エラー コードをエラー メッセージ データベースと照合することが挙げられます。Common examples where a cache sink may be better are looking up a max value on a data store and matching error codes to an error message database. 詳細については、キャッシュ シンクキャッシュされた参照に関するページをご覧ください。For more information, learn about cache sinks and cached lookups.

データ フローのスクリプトData flow script

構文Syntax

<leftStream>, <rightStream>
    lookup(
        <lookupConditionExpression>,
        multiple: { true | false },
        pickup: { 'first' | 'last' | 'any' },  ## Only required if false is selected for multiple
        { desc | asc }( <sortColumn>, { true | false }), ## Only required if 'first' or 'last' is selected. true/false determines whether to put nulls first
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <lookupTransformationName>

Example

スクリーンショットには、次のコードの [参照設定] タブが示されています。Screenshot shows the Lookup settings tab for the following code.

次のコード スニペットには、上記の参照構成に対するデータ フロー スクリプトが含まれています。The data flow script for the above lookup configuration is in the code snippet below.

SQLProducts, DimProd lookup(ProductID == ProductKey,
    multiple: false,
    pickup: 'first',
    asc(ProductKey, true),
    broadcast: 'auto')~> LookupKeys

次のステップNext steps

  • 結合変換と存在変換はどちらも、複数のストリーム入力を受け取りますThe join and exists transformations both take in multiple stream inputs
  • isMatch() と共に条件分割変換を使用して、一致する値と一致しない値に行を分割しますUse a conditional split transformation with isMatch() to split rows on matching and non-matching values