■ はじめに
https://dk521123.hatenablog.com/entry/2021/06/12/093046
に関して、細かく調査したら、JOIN の ON がないので、 交差結合(CROSS JOIN, Cartesian product)になり エラーが起きてたのが分かった。 そこで、今回は JOIN文について、改めて纏めてみる。
目次
【0】構文 1)JOINの種類 【1】INNER JOIN 1)使用上の注意 【2】LEFT|RIGHT|FULL OUTER JOIN 【3】LEFT SEMI JOIN 【4】CROSS JOIN 1)使用上の注意
【0】構文
* HiveでもJOIN(内部結合/外部結合)はサポートされている
公式サイト
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins
-- より抜粋 join_table: table_reference [INNER] JOIN table_factor [join_condition] | table_reference {LEFT|RIGHT|FULL} [OUTER] JOIN table_reference join_condition | table_reference LEFT SEMI JOIN table_reference join_condition | table_reference CROSS JOIN table_reference [join_condition]
1)JOINの種類
【1】INNER JOIN 【2】LEFT|RIGHT|FULL OUTER JOIN 【3】LEFT SEMI JOIN 【4】CROSS JOIN
【1】INNER JOIN
* SQL の INNER JOIN と同じ
テーブルの結合 ~ 内部結合・INNER JOIN ~
https://dk521123.hatenablog.com/entry/2010/02/05/131206
1)使用上の注意
* JOIN ... ON ... は、INNER JOIN ... ON ... と同じ * JOIN(ONなし)は、CROSS JOINになる(詳細は「【4】CROSS JOIN」を参照)
【2】LEFT|RIGHT|FULL OUTER JOIN
* SQL と同じ
テーブルの結合 ~ 外部結合・LEFT/RIGHT/FULL JOIN ~
https://dk521123.hatenablog.com/entry/2012/05/06/212246
【3】LEFT SEMI JOIN
* JOIN 条件が有効な場合は、左の表のデータが返す
サンプル
SELECT a.key, a.val FROM sample1 a LEFT SEMI JOIN sample2 b ON a.key = b.key; -- 以下と同じ SELECT a.key, a.value FROM sample1 a WHERE a.key in (SELECT b.key FROM sample2 b);
参考文献
https://qiita.com/KamekoKameKame/items/93d61a2a469c43e48dea
https://recruit.gmo.jp/engineer/jisedai/blog/hive-on-tez-hdp232/
【4】CROSS JOIN
* CROSS JOIN に関する詳細は、以下の関連記事を参照のこと
テーブル結合 ~ 交差結合・CROSS JOIN ~
https://dk521123.hatenablog.com/entry/2011/12/21/000000
1)使用上の注意
* CROSS JOINは、基本サポート外 => 実行すると、エラー「SemanticException」になる。 => 対応策などの詳細については、以下の関連記事を参照のこと
https://dk521123.hatenablog.com/entry/2021/06/12/093046
* JOIN(ONなし)でも代用可能
エラー「SemanticException」が発生した HQL
SELECT * FROM table1 t1 JOIN table2 t2 -- ON がないので、交差結合(CROSS JOIN)になっている WHERE t1.create_at > t2.create_at ;
参考文献
https://open-groove.net/hive/hive-join/
https://www.finddevguides.com/Hiveql-joins
関連記事
Hive / HiveQL ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2019/11/25/235219
Hive / HiveQL ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/02/25/231235
Hive / HiveQL ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2020/06/02/183823
Hive / HiveQL ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2020/03/04/225943
エラー「SemanticException Cartesian products are disabled for safety reasons」が発生する
https://dk521123.hatenablog.com/entry/2021/06/12/093046
全く関係ないテーブルを結合することを考える
https://dk521123.hatenablog.com/entry/2021/09/16/185552