分析Contourボードデータ型

注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。

データセットの結合

Contour には、結合を実行するためのさまざまなボードがあります。このガイドでは、(1)各ボードを使ってデータセットを結合する方法、(2)各ボードに相当する SQL、(3)パフォーマンスに関する考慮事項を説明します。


結合ボード

結合ボードでは、現在作業中のデータセットを別のデータセットと結合し、一致する結果をデータにマージできます。概要は次のとおりです。

contour-join

例

顧客の購入に関する情報を含むテーブルがあるとします。

customer_iditem_idpurchase_dateprice
1019991/1/200050
1219971/1/200035
…

在庫にあるすべての商品に関する情報を含む、別のテーブルもあるとします。

item_iditemweight_kg
999オーブントースター1
997フライパン0.5
…

結合ボードを使うと、購入された各商品に関する情報を元のデータセット(transactions)に追加して拡充できます。

データセットに同じ名前の列がある場合、Contour は列名に接頭辞を追加するための入力画面を表示します。この例では、両方のデータセットに item_id という列があります。結合するデータセットの列に、接頭辞「inv」(inventory の略)を付けます。

結合後のデータセットに重複する item_id 列を追加したくない場合は、結合するデータセットでその列の選択を外すことができます。

join-board

拡充されたデータセットは次のようになります。

customer_iditem_idpurchase_datepriceinv_iteminv_weight_kg
1219971/1/200035フライパン0.5
1019991/1/200050オーブントースター1
…

結合ボードの設定

実行する結合の種類を選択します。左結合(Add columns)、内部結合(Intersection)、右結合(Switch to dataset)、完全結合(Incorporate all data, matching rows where possible)から選択できます。

もう一方のデータセットから、現在作業中のデータセットに追加する列を選択します。デフォルトでは、最初のデータセットのすべての列が返されます。

次に、それぞれのデータセットから1個以上のキーを選択します。複数の結合キーを使う場合は、1つ以上の条件またはすべての条件に一致するように選択できます。

完全結合では、2つのデータセットのすべての行が返されます。2つの結合列の値は1つにまとめられないため、どちらのデータセットの結合列にも null 値が表示される可能性があります。


和集合ボード

和集合ボードを使うと、別のデータセットに基づいて現在のデータセットを変更できます。別のデータセットからデータを追加する(行の追加)、もう一方のデータセットに存在するデータのみを保持するようにデータセットを絞り込む(行の保持)、または別のデータセットに存在するデータに基づいてデータを削除する(行の削除)ことができます。データセット内の列の位置、または列名に基づいて照合するように選択できます。

次の3個のテーブルは、具体的な架空の例です。

people

first_namelast_name
CaseyLinden
JessSage
LeeRose
TaylorOak

candidates

first_namesurname
JessSage
LeeRose
JamieWood

candidates_backward

last_namefirst_name
SageJess
RoseLee
WoodJamie

人物のテーブルがあり、これを2個の候補者のテーブルと比較したいとします。どちらのテーブルも、people テーブルとはスキーマが異なります。以下のセクションでは、テーブルに対して実行する比較(集合演算)に応じた結果の集合を示します。

例:行の追加

people テーブルを起点として、candidates_backward テーブルから名前で照合して行の追加を行うと、結果の集合は次のようになります。

first_namelast_name
CaseyLinden
JessSage
LeeRose
TaylorOak
JessSage
LeeRose
JamieWood

people テーブルを起点として、candidates_backward テーブルから位置で照合して行の追加を行うと、結果の集合では、people テーブルの名前に candidates_backward テーブルの姓が追加され、姓には名前が追加されます。これはおそらく意図した結果ではありません。結果の集合は次のようになります。

first_namelast_name
CaseyLinden
JessSage
LeeRose
TaylorOak
SageJess
RoseLee
WoodJamie

candidates テーブルから people テーブルに行の追加を行う場合は、位置で照合するのが適切です。列名は一致しませんが、名前と姓の列の位置は一致するためです。列名は元の集合から引き継がれることに注目してください。

first_namelast_name
CaseyLinden
JessSage
LeeRose
TaylorOak
JessSage
LeeRose
JamieWood

例:行の保持

people テーブルを起点として、candidates テーブルを位置で照合し、そこに存在する行を対象に行の保持を行うよう和集合ボードを設定すると、結果の集合は次のようになります。

first_namelast_name
JessSage
LeeRose

people テーブルを起点として、candidates_backward テーブルを名前で照合し、そこに存在する行を対象に行の保持を行うよう和集合ボードを設定すると、結果の集合は次のようになります。

first_namelast_name
JessSage
LeeRose

例:行の削除

people テーブルを起点として、candidates テーブルを位置で照合し、そこに存在する行を対象に行の削除を行うと、結果の集合は次のようになります。

first_namelast_name
CaseyLinden
TaylorOak

people テーブルを起点として、candidates_backward テーブルを名前で照合し、そこに存在する行を対象に行の削除を行うと、結果の集合は次のようになります。

first_namelast_name
CaseyLinden
TaylorOak

代わりに、people テーブルを起点として、candidates_backward テーブルを位置で照合し、そこに存在する行を対象に行の削除を行うと、結果の集合は次のようになります。位置で照合した場合、candidates_backward テーブルに存在する行はなかったため、このテーブルは people テーブルと同一です。

first_namelast_name
CaseyLinden
JessSage
LeeRose
TaylorOak

和集合ボードの設定

行の保持、行の追加、または行の削除を選択し、比較する集合を選択します。

行の保持と行の削除では、存在するまたは一致する列を選択できます。

  • 存在するを使う場合は、位置でまたは名前で照合するように選択できます。
  • 一致する列を使う場合は、結合に使う列(各集合から1列ずつ)を指定する必要があります。
和集合には同じ列数が必要です

和集合を作成する場合、両方のデータセットの列数が同じでなければなりません。そのため、和集合ボードを使う際にスキーマが変更される可能性がある場合は、注意が必要です。たとえば、ピボット済みデータに切り替えられたピボットテーブルの下流にある和集合ボードでは、スキーマの変更によって列数が予期せず変わる可能性があります。


SQL との対応

SQL に詳しいユーザーは、Contour の結合操作を、それに相当する SQL と対応付けて考えると理解しやすくなります。 次のテーブルは、各ボードがサポートする SQL の結合の種類を示しています。

結合

結合操作は、SQL では次の処理に相当します。

Copied!
1 2 3 4 SELECT [DISTINCT] <Column1, Column2, ...> FROM CurrentTable <INNER JOIN | LEFT OUTER JOIN | RIGHT OUTER JOIN | FULL OUTER JOIN > OtherTable ON <join condition 1>([AND | OR] <join condition 2> [AND | OR] <join condition 3> ...)

和集合

**行の保持(一致する列)**は、SQL の左半結合に相当します。

Copied!
1 2 3 SELECT L.* FROM L INNER JOIN (SELECT DISTINCT <join column> FROM R) AS R_KEY ON L.<join column> = R_KEY.<join column>

**行の削除(一致する列)**は、結合キーが一致しない行を対象とする SQL の左外部結合に相当します。

Copied!
1 2 3 4 SELECT L.* FROM L LEFT OUTER JOIN R ON L.<join column> = R.<join column> WHERE R.<join column> is null

データ型

結果の集合を確認し、データ型が期待されるものになっていることを確かめてください。

和集合ボードを使用するときは、列のデータ型に注意してください。対応する列のデータ型はキャストされます。具体例として、次の2個のデータセットを考えます。

dataset1

ID (int)名前(文字列)
555Alice
666Bob

dataset2

ID (Long)名前(文字列)
555Alice
999Chloe

dataset1 を起点として、dataset2 から位置に基づいて行を追加すると、結果の集合は次のようになります。

ID (Long)名前(文字列)
555Alice
666Bob
555Alice
999Chloe

dataset1 を起点として、行の保持で次に表示の対象を dataset2 とし、位置に基づいて照合すると、結果の集合は次のようになります。

ID (Long)名前(文字列)
555Alice

元の集合では ID 列が int 型でしたが、結果の集合では Long 型になります。行の保持と次に表示の組み合わせでは、 Spark の Intersect 関数を使用します。

dataset1 を起点として、行の削除で次に表示の対象を dataset2 とし、位置に基づいて照合すると、結果の集合は次のようになります。

ID (Long)名前(文字列)
666Bob

この場合も、元の集合では ID 列が int 型でしたが、結果の集合では Long 型になります。行の削除と次に表示の組み合わせでは、 Spark の Except 関数を使用します。


パフォーマンスに関する考慮事項

  • 2個のテーブルを結合するキーを選ぶときは、できるだけ一意の ID(主キーなど)を使用してください。外部キーによる結合は Spark のクラッシュを引き起こすため、使用しないことを強く推奨します。
  • 複雑な結合や式を使用した後は、データセットとして保存機能を使用し、作業を「保存」してから続行してください。結合結果がディスクに永続化されるため、下流のクエリのパフォーマンスが向上します。

結果の確認

データセットを結合した後は、結合結果の集合をテーブルで表示して、期待どおりの結果になっているかを確認することをお勧めします。アクションリボンでテーブルを選択してテーブルボードを追加し、新しい結合結果の集合をスクロールして確認します。