HIVEの6種類のjoinの使い方


自分にファイルを残すのは、基本的にこのブログから写したものです.

例:2つのテーブル


表A:
id
name
1
張三
2
李四
3
王五
表B:
id
age
1
20
2
29
4
30

join


内部関連付け、2つのテーブルの関連付けの結果のみを返します.
select a.id, a.name, b.age from a join b on a.id = b.id

結果:
a.id
a.name
b.age
1
張三
20
2
李四
29

left (outer) join


左外関連、キーワードouterは省略できます.left joinキーの前のテーブルをプライマリテーブルとし、他のテーブルと関連付けて、レコードとプライマリテーブルのレコード数が一致し、関連付けられていないフィールドがnullに設定されます.
select a.id, a.name, b.age from a left join b on a.id = b.id

結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
3
王五
null

right (outer) join


右外部関連、キーワードouterは省略できます.left joinとは逆にright joinキーの後ろのテーブルをプライマリテーブルとし、他のテーブルと関連付け、リターンレコードとプライマリテーブルのレコード数が一致し、関連付けられていないフィールドがnullに設定されます.
select a.id, a.name, b.age from a right join b on a.id = b.id

結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
null
null
30

full (outer) join


全外関連、キーワードouterは省略できます.2つのテーブルのレコードを基準に、2つのテーブルのレコードの重さの和を返します.関連付けられないフィールドはnullです.
select a.id, a.name, b.age from a full join b on a.id = b.id

結果:
a.id
a.name
b.age
1
張三
20
2
李四
29
3
王五
null
null
null
30

left semi join


left semi joinキーの前のテーブルをメインテーブルとし、メインテーブルを返すKEYもサブテーブルに記録されます.
select a.name, b.name from a left semi join b on a.id = b.id

結果:
a.id
a.name
1
張三
2
李四

cross join


デカルト積の関連付けは、2つのテーブルのデカルト積の結果を返します.関連付けキーを指定する必要はありません.
select a.id, a.name, b.age from a cross join b

結果:
a.id
a.name
b.age
1
張三
20
1
張三
29
1
張三
30
2
李四
20
2
李四
29
2
李四
30
3
王五
20
3
王五
29
3
王五
30