1. はじめに

皆さんこんにちは。
今回は、データフローの結合処理を行った後に、重複したレコードが発生してしまう事象の対策について説明します。

2. 起きた事象と原因

ADFデータフローでJOIN結合を実行する時に、返却されたレコードが2回以上重複される場合があります。
今回の例では、テーブル A とテーブル Bを結合し、商品と価格の一覧表を出力するとします。

  • テーブル A
  • テーブル B

LEFT OUTER JOIN (左外部結合)を使用して、テーブル A とテーブル Bを以下の条件で結合してみます。

[TableA].[type] = [TableB].[type]

期待される結合結果は、テーブル A の全てレコードと、カラム「type」に対応するカラム「product_name」の値が返されることです。しかし、重複したレコードが返却され、テーブル A のレコード数より多く出力されてしまいました。

  • JOIN条件
  • 結果
  • 原因
    結合条件であるカラム「type」の値をキーに、下記の通り結合処理が行われるため、重複が発生します。

    • テーブルAの1レコード目のカラム「type」の値「海鮮」に合致するレコードを、テーブルBで検索
      →テーブルBの1レコード目、2レコード目がヒットします。
      →テーブルAの1レコード目とテーブルBの結合結果として、2レコード出力されます。
      ※重複が発生
    • テーブルAの2レコード目のカラム「type」の値「海鮮」に合致するレコードを、テーブルBで検索
      →テーブルBの1レコード目、2レコード目がヒットします。
      →テーブルAの2レコード目とテーブルBの結合結果として、2レコード出力されます。
      ※重複が発生
    • テーブルAの3レコード目のカラム「type」の値「洋食」に合致するレコードを、テーブルBで検索
      →テーブルBの3レコード目がヒットします。
      →テーブルAの3レコード目とテーブルBの結合結果として、1レコード出力されます。

3. 対応策

重複の発生を防ぐ対応策としては、重複の発生しない組み合わせで結合条件のカラムを指定します。
以降の手順では例として、プライマリキー「id」を結合条件として使用します。

テーブル B の「ID」フィールドが主キーとして設定され、テーブル A の「ID」フィールドがテーブル B の「ID」フィールドを参照する外部キーとして設定されます。

① 次の条件をJOIN条件に追加します。

[TableA].[id] = [TableB].[id]

② 返却結果には、重複が発生しません。

3. まとめ

Azure Data Factoryでデータフローの結合処理で、 レコードの重複発生を回避する方法について説明しました。

今回の記事が少しでもAzure Data Factoryを知るきっかけや、業務のご参考になれば幸いです。

Azure Data FactoryやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!

・Azure Data Factory連載シリーズはこちら