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