Hive总结(六)表的三种连接方式

0.数据源

hive> SELECT * FROM test;      id_name
9   Nermaer
31  JiaJia
10  Messi
16  Santi
6   Tian
21  Pirlo
hive> SELECT * FROM test_name;      
26  Santi
26  Tian
99  xiaozha99

1内连接

SELECE a.,b.
FROM a JOIN b ON(a.xx=b.xx)
hive只支持等值连接,这意味着连接的谓语条件只能使用等号。

hive> SELECT test.* ,test_name.*
    > FROM test JOIN test_name ON(test.name=test_name.name);
16  Santi   26  Santi
6   Tian    26  Tian

用EXPLAIN来查看hive为整个查询使用了多少个mapreduce
EXPLAIN EXTENDED 能够查看更多的详细信息。
[注意]
Hive会智能的选取最少的mapreduce执行操作。
HIve只允许在FROM子句中出现一张表,要进行连接操作,必须执行JOIN操作.
也不支持mysql在from语句中写出表,在where语句中指出条件。
如下:不支持一下语句。

select test.*,test_name.*
from test,test_name
where test.id=test_name.xx;

2外连接

内连接只显示了俩张表都存在的数据,而外连接则是显示出所有的数据
其中左连接是左外边的表输出完整数据。右外连接是右边的表输出完整数据,全外连接就是两张表的所有行全部输出。
(1)左外连接 LEAF OUTER JOIN

hive> SELECT test.*,test_name.*
> FROM test LEFT OUTER JOIN test_name ON(test.name=test_name.name);
9   Nermaer NULL    NULL
31  JiaJia  NULL    NULL
10  Messi   NULL    NULL
16  Santi   26      Santi
6   Tian        26      Tian
21  Pirlo       NULL    NULL

(2)右外连接

hive> SELECT test.*,test_name.*
    > FROM test RIGHT OUTER JOIN test_name ON(test.name=test_name.name);
16      Santi   26  Santi
6       Tian        26  Tian
NULL    NULL    99  xiaozha99

(3)全外连接

hive> SELECT test.*,test_name.*
    > FROM test FULL OUTER JOIN test_name ON(test.name=test_name.name);
31      JiaJia  NULL    NULL
10      Messi   NULL    NULL    
9       Nermaer NULL    NULL
21      Pirlo       NULL    NULL
16      Santi   26      Santi
6       Tian        26      Tian
NULL    NULL    99      xiaozha99

3半连接

*SELECT FROM a
WHERE a.xxx IN (SELECT xxx FROM b )**
可以查A表中的某列在B表中出现的值,其实和内连接的效果一样,只不过使用IN查询。

hive> SELECT * FROM test
> WHERE test.name IN (SELECT name FROM test_name);
16  Santi
6   Tian

你可能感兴趣的:(hive)