Hive mysql 内连接_Hive-表连接

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;

结果如下

eb8518eb82163b362d908a3ea9d9a2c0.png

10.1.2.    左外连接

左外连接:左边有,右边如果没有数据,那么为空。

执行以下语句

select * from user left outer join job on user.id=job.user_id;

不能使用let join,只能使用left outerjoin。结果如下

2265067a4fdb88ce63a56db03762a788.png

10.1.3.    右外连接

执行以下语句

select * from user right outer join job on user.id=job.user_id;

结果如下

3a9d4d1f98fd581e0c84397049fd7917.png

10.1.4.    全外连接

执行以下语句

select * from user full outer join job on user.id=job.user_id;

结果如下

b891c9ece0188334e5b9ede1f73848c0.png

10.1.5.    左半连接

执行以下语句,左半连接用来代替in操作或者exists操作的

select * from user left semi join job on user.id=job.user_id;

结果如下

dd19df955ff44e32efb35eae2fa02194.png

该语句相当于如下语句

select * from user where id in (select user_id from job);

但是,hive不支持in子句。所以只能变通,使用left semi子句。

参考链接:http://blog.csdn.net/woshisap/article/details/43422423

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值