縦結合
2 つのノードの SQL を UNION でつなぎ、行を縦に積み上げます。先月分と今月分、支店ごとのテーブルをまとめる、といった使い方をします。
分析プロジェクトとの違い
| 見るところ | SQLビルダー | 分析プロジェクト |
|---|---|---|
| 結合のしかた | 共通のキーすべて結合 / 列を指定して結合 の 2 通り | 左右の共通列をすべて結合 / 左右の列をすべて結合 / 列を指定して結合 の 3 通り |
| 列を指定するとき | 左右それぞれで列を選ぶ | 共通の列を選ぶ |
| 相手にない列 | 「列を指定して結合」でだけ空欄にして残せる | 「左右の列をすべて結合」で残せる |
| 重複行の削除 | ある | ある |
入出力
| ポート | 内容 |
|---|---|
| 左側 | データ |
| 右側 | データ |
| 出力データ | データ |
設定項目
- 設定
- 共通のキーすべて結合(既定)か列を指定して結合を選びます。
- 結合する列の設定
- 「列を指定して結合」を選んだときだけ出る見出しです。この下に左右の列選択が並びます。
- 左ノードの列選択
- 「列を指定して結合」のときに出ます。複数選べます。
- 右ノードの列選択
- 「列を指定して結合」のときに出ます。複数選べます。
- 重複行が発生したら削除する
- on にすると、積み上げたあとで同じ内容の行を 1 行にまとめます。既定は off です。
列の合わせ方
共通のキーすべて結合
左右の両方にあり、かつ型もそろっている列だけが残ります。片方にしかない列、名前は同じでも型が違う列は落ちます。
型の比較は nehan の型(文字列・数値・日付・日付時刻・時刻・真偽)どうしで行うので、データベース上の型名が int と bigint のように違っていても、どちらも数値なら同じとみなされます。
列を指定して結合
左右それぞれで列を選びます。 片方でしか選ばれなかった列は、もう片方では空欄(NULL)として積まれます。相手にない列を落としたくないときはこちらを使ってください。
出力される列は名前順に並びます。
生成される SQL
PostgreSQL につないで、店舗 と 売上 を共通列として積み上げた場合です。
SELECT "店舗", "売上"FROM ( SELECT "店舗", "売上" FROM (SELECT * FROM "sales_2025") AS "port_左" UNION ALL SELECT "店舗", "売上" FROM (SELECT * FROM "sales_2026") AS "port_右") AS "node_3"左右はそれぞれかっこで囲まれ、さらに全体がもう一度囲まれます。 結合が右側を素のテーブル名のまま置くことがあるのに対し、縦結合はどちらの側も必ず副問い合わせに包みます。
別名は入力ポートの ID とこのノードの ID です。 実際には port_csDpjXTdYNeQWUpEmpyK / node_hAq2mXsVb1RkTgPd9LwZ のようなランダムな文字列になるので、上の例ではそれぞれ port_左 port_右 node_3 と書いています。
「重複行が発生したら削除する」を on にすると UNION ALL が UNION に変わります(Google BigQuery では UNION DISTINCT)。
エラーと対処
どのエラーも、設定を直してノードを実行し直せば消えます。
上流にない列が選ばれている
前のノードで列が消えたあとに実行すると出ます。
存在しない列が選択されています
直し方 — 列を選び直してください。
入力がどちらもつながっていない
左側・右側のどちらにもノードをつないでいないと出ます。
カラムが選択されていません。条件を確認してください
直し方 — 左側・右側の両方にノードをつないでください。
左右で同じ名前の列の型が違う
「列を指定して結合」で、左右から同じ名前の列を選んだのに型がそろっていないと出ます。翻訳された文言はなく、英語のまま出ます。
列名 is not same dtype. left: 型. right: 型
直し方 — 手前に列の型変更を置いて、左右の型をそろえてください。
片側だけつながっている・片側の列が空
次のどちらでも出ます。翻訳された文言はなく、英語のまま出ます。
- 左右のどちらか一方しかノードをつないでいない
- 「列を指定して結合」で、左右どちらかの列選択が空のまま
left and right columns is required 1 as least
直し方 — もう片方にもノードをつなぎ、左右それぞれで列を 1 つ以上選んでください。
よく使う例
1. 月ごとのテーブルを 1 つにする
お題 — sales_2025 と sales_2026 を続けて分析したい
入力 — 左右に同じ列構成のテーブル
設定 — 共通のキーすべて結合
出力 — 両方の行が縦に並んだデータ
2. 片方にだけある列を残す
お題 — 新しい月のテーブルにだけ キャンペーン 列がある
入力 — 左に 店舗 売上、右に 店舗 売上 キャンペーン
設定 — 列を指定して結合。左で 店舗 売上、右で 店舗 売上 キャンペーン を選ぶ
出力 — 古い月の行は キャンペーン が空欄になります
3. 重複を取り除いて名簿を作る
お題 — 2 つの名簿を合わせて、同じ人を 1 行にしたい
入力 — 左右に同じ列構成の名簿(氏名 所属)
設定 — 共通のキーすべて結合 + 「重複行が発生したら削除する」を on
出力 — まったく同じ行が 1 行にまとまります
4. どちらから来た行か分かるようにする
お題 — 積み上げたあとで出どころを見分けたい
入力 — 左右に同じ列構成のテーブル
設定 — 左右それぞれの手前に条件に応じて値を列に挿入を置き、区分 列を作ってから縦結合する
出力 — 区分 で絞り込めるようになります
5. 積んでから件数を数える
お題 — 合わせて何行になったか先に知りたい
入力 — 左右に同じ列構成のテーブル
設定 — この機能のあとにSQLの件数を確認するをつなぐ
出力 — 行数だけが返ります