Hive只支持等值连接,即ON子句中使用等号连接,不支持非等值连接。
Hive内置的数据存储类型,TextFile, SequenceFile, ORC(列式存储)
如果连接语句中有WHERE子句,会先执行JOIN子句,再执行WHERE子句。[吴超1]
假设有以下测试数据
表user数据如下
User_id | name |
1 | 张三 |
2 | 李四 |
3 | 王五 |
表job数据如下
Job_id | job | user_id |
1 | 工程师 | 1 |
2 | 美工 | 2 |
3 | 美工 | 4 |
建表语句如下
CREATE TABLE IF NOT EXISTS user(id int, name string) ROW FORMATDELIMITED FIELDS TERMINATED BY ‘\t’;
CREATE TABLE IF NOT EXISTS job(id int, job string, user_id int) ROWFORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;
10.1.1. 内连接
内连接指的是把符合两边连接条件的数据查询出来。
执行以下语句
select * from user join job on user.id=job.user_id;
结果如下
10.1.2. 左外连接
左外连接:左边有,右边如果没有数据,那么为空。
执行以下语句
select * from user left outer join job on user.id=job.user_id;
不能使用let join,只能使用left outerjoin。结果如下
10.1.3. 右外连接
执行以下语句
select * from user right outer join job on user.id=job.user_id;
结果如下
10.1.4. 全外连接
执行以下语句
select * from user full outer join job on user.id=job.user_id;
结果如下
10.1.5. 左半连接
执行以下语句,左半连接用来代替in操作或者exists操作的
select * from user left semi join job on user.id=job.user_id;
结果如下
该语句相当于如下语句
select * from user where id in (select user_id from job);
但是,hive不支持in子句。所以只能变通,使用left semi子句。
参考链接:http://blog.csdn.net/woshisap/article/details/43422423