単純な横結合
2 つのデータを横に並べて、列数の多い 1 つのデータにします。顧客の一覧と、同じ並び順の購入金額の一覧を 1 つの表にまとめる、といった使い方をします。
上から順に位置で並べるだけの機能です。 値を突き合わせたいならキー列を指定する結合、行を縦に積み増したいなら単純な縦結合を使ってください。
入出力
| ポート | 内容 |
|---|---|
| 左入力データ | データ |
| 右入力データ | データ |
| 出力データ | 横に並べたデータ |
Spark エンジンでも動きます。
設定項目
- 左ノードを選択
- 左入力から結合する列を「結合対象列を選択」で選びます。複数選べます。
- 右ノードを選択
- 右入力から結合する列を「結合対象列を選択」で選びます。選び方は左と同じです。
どちらも省略できません。 画面では印が付きませんが、片方でも空のまま実行するとエラーになります。
列の選び方
「列選択」を押すと「選択ルールの作成」が開きます。ルールは何本でも足せて、上から順に適用されます。1 本は「選択方法」(次を選択 / 次を削除)と「一致方式」の組です。
| 一致方式 | 内容 |
|---|---|
| すべての列 | その入力の列を全部選ぶ |
| 列名一致 | 名前を 1 つずつ選ぶ |
| 列型一致 | 文字列 / 数値 / 日付 / 日付時間 / 時間 のいずれか |
| 指定文字から始まる列名 | 入力した文字で始まる列 |
| 指定文字で終わる列名 | 入力した文字で終わる列 |
| 指定文字を含む列名 | 入力した文字を含む列 |
| 正規表現一致 | 正規表現に当たる列 |
「すべての列」を選んだあとに「次を削除」+「列名一致」で 顧客ID を足せば、1 列だけ落とした全列が選べます。
列の並び方
出力の列は左入力の列 → 右入力の列の順に並びます。
それぞれの中では、元のデータの列順になります。選んだ順ではありません。たとえば左入力が 顧客ID / 氏名 / 年齢 で、選ぶときに 年齢 → 顧客ID の順に選んでも、出力は 顧客ID / 年齢 の順です。
行数が違うとき
多い方の行数に合わせ、足りない側は空欄になります。 エラーにはなりません。
たとえば左が 5 行・右が 3 行なら、出力は 5 行になり、右から来た列の 4 行目・5 行目が空欄になります(例 5)。
0 行のデータを結合することもできます。左右とも 0 行なら、列だけがある 0 行のデータが出ます。
同じ名前の列があるとき
左右の選んだ列に同じ名前があると、自動で名前が変わります。
| どちらの列か | 変更前 | 変更後 |
|---|---|---|
| 左入力の列 | 金額 | left_金額 |
| 右入力の列 | 金額 | right_金額 |
- 名前が重なった列だけが変わります。重なっていない列はそのままです
- 付ける名前は選べません。
left_/right_が決まりで付きます。別の名前にしたいときは、結合する前に列名の変更で変えておいてください - 変えた結果さらに名前が重なる場合(左入力にもともと
left_金額がある場合など)は、末尾に番号が付きます
エラーと対処
どのエラーも、左右それぞれのデータを 1 つ前のノードで開いて、列名を見比べるところから始めてください。
結合する列を選んでいない
左右どちらかの列を選ばずに実行したとき。
対象の列が選択されていません。
直し方 — 「左ノードを選択」「右ノードを選択」の両方で列を選んでください。すべての列を使うなら「すべての列」を指定します。
選んだ列が見つからない
指定した列名が入力データにないとき。前の処理で列名を変えたり、列を削ったりすると起きます。また、前方一致や型での指定が 1 列にも当たらなかったときも同じエラーになります。
対象の列が存在しません。
直し方 — 入力データの列名を確かめてください。前の処理で名前が変わっているなら、選び直すか、名前に依存しない選び方(すべての列・列型一致)に変えます。
左のデータがつながっていない
左入力にノードがつながっていないとき。
左側のデータが入力されていません。
直し方 — 左入力につなぐノードを確かめてください。入力が 2 つあるので、片方だけつないだ状態になっていないか見てください。
右のデータがつながっていない
右入力にノードがつながっていないとき。
右側のデータが入力されていません。
直し方 — 右入力につなぐノードを確かめてください。
よく使う例
1. 行数が同じ 2 つの表を 1 つにする
お題 — 顧客の一覧と、同じ並び順で作った購入金額の一覧を 1 つの表にする
入力(左)
| 顧客ID | 氏名 |
|---|---|
| C001 | 田中 |
| C002 | 鈴木 |
| C003 | 佐藤 |
入力(右)
| 購入額 |
|---|
| 1200 |
| 3400 |
| 800 |
設定 — 左「すべての列」/右「すべての列」
出力
| 顧客ID | 氏名 | 購入額 |
|---|---|---|
| C001 | 田中 | 1200 |
| C002 | 鈴木 | 3400 |
| C003 | 佐藤 | 800 |
2. 必要な列だけを持ってくる
お題 — 右の表からは購入額だけが欲しい(区分や登録日は要らない)
入力(左)
| 顧客ID | 氏名 |
|---|---|
| C001 | 田中 |
| C002 | 鈴木 |
入力(右)
| 購入額 | 区分 | 登録日 |
|---|---|---|
| 1200 | A | 2024-01-05 |
| 3400 | B | 2024-01-07 |
設定 — 左「すべての列」/右は「列名一致」で 購入額 だけを選ぶ
出力
| 顧客ID | 氏名 | 購入額 |
|---|---|---|
| C001 | 田中 | 1200 |
| C002 | 鈴木 | 3400 |
3. ID 以外のすべてを横に付ける
お題 — 右の表の 顧客ID は左にもあるので要らない。それ以外は全部欲しい
入力(左)
| 顧客ID | 氏名 |
|---|---|
| C001 | 田中 |
入力(右)
| 顧客ID | 購入額 | 区分 |
|---|---|---|
| C001 | 1200 | A |
設定 — 左「すべての列」/右で「すべての列」を選び、続けて「次を削除」+「列名一致」で 顧客ID を指定するルールを足す
出力
| 顧客ID | 氏名 | 購入額 | 区分 |
|---|---|---|---|
| C001 | 田中 | 1200 | A |
顧客ID が片方にしか残っていないので、left_顧客ID のような名前の変更も起きません。
4. 数値の列だけを横に付ける
お題 — 右の表のうち、集計に使う数値の列だけが欲しい
入力(左)
| 顧客ID |
|---|
| C001 |
入力(右)
| 購入額 | 回数 | 区分 |
|---|---|---|
| 1200 | 3 | A |
設定 — 左「すべての列」/右で「列型一致」を使い、数値を指定する
出力
| 顧客ID | 購入額 | 回数 |
|---|---|---|
| C001 | 1200 | 3 |
列が増減しても設定を直さずに済みます。
5. 行数が違う表を結合する
お題 — 5 行の実績表に 3 行しかない目標表を並べると、足りない分がどうなるかを見たい
入力(左 5 行)
| 月 | 実績 |
|---|---|
| 1 | 120 |
| 2 | 140 |
| 3 | 90 |
| 4 | 160 |
| 5 | 130 |
入力(右 3 行)
| 目標 |
|---|
| 100 |
| 100 |
| 100 |
設定 — 左右とも「すべての列」
出力
| 月 | 実績 | 目標 |
|---|---|---|
| 1 | 120 | 100 |
| 2 | 140 | 100 |
| 3 | 90 | 100 |
| 4 | 160 | |
| 5 | 130 |
6. 同じ名前の列がある表を結合する
お題 — 左右とも 金額 という列を持っていて、両方を残したい
入力(左)
| 顧客ID | 金額 |
|---|---|
| C001 | 1200 |
入力(右)
| 金額 |
|---|
| 1000 |
設定 — 左右とも「すべての列」
出力
| 顧客ID | left_金額 | right_金額 |
|---|---|---|
| C001 | 1200 | 1000 |
どちらがどちらか分かるよう、結合後に列名の変更で 実績金額 予算金額 のような名前にしておくと、後が読みやすくなります。