LoginSignup
0

More than 5 years have passed since last update.

【Hive】カラム追加後のFULL OUTER JOINがどうなるかわかってなかった

Posted at

はじめに

FULL OUTER JOINを使っているバッチ処理があり
片方のテーブルにカラム追加することになった。
どんな結果になるのかイメージがつかなかったため
自分でテストしてみた。

環境

Hive

やったこと

下記のような2つのテーブルがある。
同じようなテーブルだが
fugaテーブルの方はカラムが1つ少ない。

hogeテーブル

no name yomi number
1 佐藤 sato 200
2 鈴木 suzuki 175
3 高橋 takahashi 145
4 田中 tanaka 135
5 渡辺 watanabe 115
6 伊藤 ito 110

fugaテーブル

no name yomi
1 佐藤 sato
2 鈴木 suzuki
3 高橋 takahashi
4 田中 tanaka

下記のコマンドを叩いてfugaにもカラムを追加する。

ALTER TABLE fuga ADD COLUMNS (number INT);

こうするとnumberカラムが追加されるが、カラムの中身はNULLになる。

fugaテーブル(カラム追加直後)

no name yomi number
1 佐藤 sato NULL
2 鈴木 suzuki NULL
3 高橋 takahashi NULL
4 田中 tanaka NULL

ここで下記のSQLを投げてfugaの中身を
INSERT OVERWRITEで上書きしてみると思ってた結果と違った。

投げたSQL

INSERT OVERWRITE TABLE fuga
SELECT
  if(h.no IS NULL, f.no, h.no) as no,
  if(h.name IS NULL, f.name, h.name) as name,
  if(h.yomi IS NULL, f.yomi, h.yomi) as yomi,
  if(h.number IS NULL, f.number, h.number) as number
FROM
  (
   SELECT
     *
   FROM
     hoge
  ) h
FULL OUTER JOIN
     fuga f
ON
  h.no = f.no
;

INSERT OVERWRITE後のfugaテーブル(予想)

no name yomi number
1 佐藤 sato NULL
1 佐藤 sato 200
2 鈴木 suzuki NULL
2 鈴木 suzuki 175
3 高橋 takahashi NULL
3 高橋 takahashi 145
4 田中 tanaka NULL
4 田中 tanaka 135
5 渡辺 watanabe 115
6 伊藤 ito 110

INSERT OVERWRITE後のfugaテーブル(実際の結果)

no name yomi number
1 佐藤 sato 200
2 鈴木 suzuki 175
3 高橋 takahashi 145
4 田中 tanaka 135
5 渡辺 watanabe 115
6 伊藤 ito 110

終わりに

クエリを見ればわかる当たり前な結果が出たけど
テストしてみるまで間違った予想をしていたので
自分で手を動かして確かめて良かった。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0