コンテンツにスキップ

縦結合

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の件数を確認するをつなぐ

出力 — 行数だけが返ります

関連