マッピング データ フローの存在変換
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新しい試用版を開始する方法について説明します。
データ フローは、Azure Data Factory および Azure Synapse Pipelines の両方で使用できます。 この記事は、マッピング データ フローに適用されます。 変換を初めて使用する場合は、概要の記事「マッピング データ フローを使用してデータを変換する」を参照してください。
存在変換は、ご利用のデータが別のソースまたはストリームに存在するかどうかを確認する行のフィルター変換です。 出力ストリームには、左側ストリームに存在するすべての行が含まれます。これらの行には、右側ストリームに存在する行も存在しない行もあります。 存在変換は SQL WHERE EXISTS
および SQL WHERE NOT EXISTS
と同様です。
構成
- [右側ストリーム] ドロップダウンで、存在しているかどうかを確認するデータ ストリームを選択します。
- [Exist type](存在の種類) 設定では存在するデータまたは存在しないデータを探すかどうかを指定します。
- カスタム式を使用するかどうかを選択します。
- 存在条件として比較するキー列を選択します。 既定では、データフローは、1 つの列について各ストリームでの同等性を検索します。 計算値で比較するには、列のドロップダウン上にマウス ポインターを移動し、 [計算列] を選択します。
複数存在条件
各ストリームからの複数の列を比較するには、既存の行の横にある正符号アイコンをクリックして、新しい存在条件を追加します。 それぞれの追加の条件は、"and" ステートメントによって結合されます。 2 つの列を比較することは、次の式と同じです。
source1@column1 == source2@column1 && source1@column2 == source2@column2
カスタム式
"and" および "equals to" 以外の演算子を含む自由形式の式を作成するには、[カスタム式] フィールドを選択します。 青いボックスをクリックすると、データ フロー式ビルダーを介してカスタム式を入力できます。
スキーマ ドリフトによって列の "遅延バインディング" を使用してデータ フローで動的なパターンを構築する場合は、byName()
式関数を使用して、列名をハードコーディングしないで (つまり、事前バインディング) exists 変換を使用できます。 例: toString(byName('ProductNumber','source1')) == toString(byName('ProductNumber','source2'))
ブロードキャストの最適化
結合変換、参照変換、および存在変換では、一方または両方のデータ ストリームがワーカー ノードのメモリに収まる場合、ブロードキャストを有効にすることでパフォーマンスを最適化できます。 既定では、ある一方をブロードキャストするかどうかは、Spark エンジンによって自動的に決定されます。 ブロードキャストする側を手動で選択するには [Fixed](固定) を選択します。
[オフ] オプションを使用してブロードキャストを無効にすることは、結合でタイムアウト エラーが発生する場合を除いて推奨されません。
データ フローのスクリプト
構文
<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 エクスペリエンスでは、この変換は次の図のようになります。
この変換のデータ フロー スクリプトは、次のスニペットに含まれています。
NameNorm2, TypeConversions
exists(
NameNorm2@EmpID == TypeConversions@EmpID && NameNorm2@Region == DimEmployees@Region,
negate:false,
broadcast: 'auto'
) ~> checkForChanges