ご用心!Alteryx DesignerでJOINしても、データ件数が減らないというかむしろ増える件

お盆過ぎましたが、まだまだ暑いですね。少し涼しくなる話をしましょうか。
2020.08.19

Alteryx Designerの定番ツールの一つにJOIN(結合)ツールがあります。 このツールはSQL文のJOIN句と同じ、2つのデータを特定のフィールドをキーにして横に結合するものです。

本エントリでは、このJOINツールを使う際の注意点をご紹介します。

症状

JOINツールでデータ結合をしても、結合前のデータ件数と比較して件数が減らない

下図の様に、それぞれ3件(3レコード)のデータを持つテーブルを結合する例を考えます。指定した結合キー(ID1とID2)のフィールド値が同じ者同士は結合され、そうでないものはそれぞれLEFT/RIGHT OUTER値としてJOINツールのOutputに出力されます。

この考え方でいくと、それぞれの入力テーブルの結合キーにおけるフィールド値が同じものが含まれていれば、その分だけ出力の件数(レコード数)は減り、全くフィールド値が一致しない最悪のパターンでも、2つの入力テーブルのレコード数の合計値は超えない筈です。

ところが、JOINしたにも関わらず入力テーブルのレコード数合計と同じか、むしろJOIN後のレコード数が多いという状況が発生することがあります。

原因

JOINのキーに設定しているフィールドに重複データが存在する

実はJOINの処理において結合キーのフィールド値がそれぞれに同じ値が含まれる場合は直積、つまり総当たりで組み合わせを実施した結果を出力する振る舞いになります。

下の例では、それぞれのテーブルの結合キーに同じ値"2"が2件ずつ格納されています。この場合は2件×2件の4件のレコードが出力されることになります。元のテーブルのレコード数は合計6件ですが、JOINツールを使った後の出力の合計も6件。JOINしたにも関わらずレコード数が減っていません。

対策

JOINのキーに設定しているフィールドのデータを確認する

JOINの対象となるデータにBROWSE(閲覧)ツールを繋いでフローを実施し、データ分布が想定通りか(フィールド値に重複がないか)を確認してください。 下図の例ではBROWSEツールで表示されるデータプロファイリングチャートにて、ID1には「2, 2」と示されています。これはID1フィールド内に"2"という値が2件含まれている事を表しています。また、Firstは「全ての値はユニーク」として重複がないことを示しています。

BROWSEツールで参照できる内容については、下記エントリでもう少し詳しい説明があります。

Alteryx 2020.2 新機能:閲覧ツールでのデータプロファイリングをもっと便利にする5つのアップデートが登場!

BROWSEツールにて想定していなかった重複データが見つかり、これをJOIN前に削除したい場合は、UNIQUE(ユニーク)ツールの使用を検討してください。

AlteryxのUniqueツールの動きをちゃんと理解しておく