マッピング データ フローの存在変換

適用対象: Azure Data Factory Azure Synapse Analytics

データ フローは、Azure Data Factory および Azure Synapse Pipelines の両方で使用できます。 この記事は、マッピング データ フローに適用されます。 変換を初めて使用する場合は、概要の記事「マッピング データ フローを使用してデータを変換する」を参照してください。

存在変換は、ご利用のデータが別のソースまたはストリームに存在するかどうかを確認する行のフィルター変換です。 出力ストリームには、左側ストリームに存在するすべての行が含まれます。これらの行には、右側ストリームに存在する行も存在しない行もあります。 存在変換は SQL WHERE EXISTS および SQL WHERE NOT EXISTS と同様です。

構成

  1. [右側ストリーム] ドロップダウンで、存在しているかどうかを確認するデータ ストリームを選択します。
  2. [Exist type](存在の種類) 設定では存在するデータまたは存在しないデータを探すかどうかを指定します。
  3. カスタム式を使用するかどうかを選択します。
  4. 存在条件として比較するキー列を選択します。 既定では、データフローは、1 つの列について各ストリームでの同等性を検索します。 計算値で比較するには、列のドロップダウン上にマウス ポインターを移動し、 [計算列] を選択します。

Exists settings

複数存在条件

各ストリームからの複数の列を比較するには、既存の行の横にある正符号アイコンをクリックして、新しい存在条件を追加します。 それぞれの追加の条件は、"and" ステートメントによって結合されます。 2 つの列を比較することは、次の式と同じです。

source1@column1 == source2@column1 && source1@column2 == source2@column2

カスタム式

"and" および "equals to" 以外の演算子を含む自由形式の式を作成するには、[カスタム式] フィールドを選択します。 青いボックスをクリックすると、データ フロー式ビルダーを介してカスタム式を入力できます。

Exists custom settings

スキーマ ドリフトによって列の "遅延バインディング" を使用してデータ フローで動的なパターンを構築する場合は、byName()式関数を使用して、列名をハードコーディングしないで (つまり、事前バインディング) exists 変換を使用できます。 例: toString(byName('ProductNumber','source1')) == toString(byName('ProductNumber','source2'))

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

Broadcast Join

結合変換、参照変換、および存在変換では、一方または両方のデータ ストリームがワーカー ノードのメモリに収まる場合、ブロードキャストを有効にすることでパフォーマンスを最適化できます。 既定では、ある一方をブロードキャストするかどうかは、Spark エンジンによって自動的に決定されます。 ブロードキャストする側を手動で選択するには [Fixed](固定) を選択します。

Off オプションを使用してブロードキャストを無効にすることは、タイムアウト エラーが発生していない限り推薦されません。

データ フローのスクリプト

構文

<leftStream>, <rightStream>
    exists(
        <conditionalExpression>,
        negate: { true | false },
        broadcast: { 'auto' | 'left' | 'right' | 'both' | 'off' }
    ) ~> <existsTransformationName>

以下の例は、左側ストリーム NameNorm2 と右側ストリーム TypeConversions を取る checkForChanges という名前の存在変換です。 存在条件の式は NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region です。この式では、各ストリームで EMPID 列と Region 列の両方が一致する場合に true が返されます。 存在を確認している間、negate は false になります。 最適化タブでブロードキャストを有効にしていないので、broadcast の値は 'none' になります。

UI エクスペリエンスでは、この変換は次の図のようになります。

Exists example

この変換のデータ フロー スクリプトは、次のスニペットに含まれています。

NameNorm2, TypeConversions
    exists(
        NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region,
	    negate:false,
	    broadcast: 'auto'
    ) ~> checkForChanges

次のステップ

同様の変換として、参照結合があります。