新坑~~
最近几个月,本人因为工作原因一直在使用hadoop + hive + map/reduce 和shell脚本来处理一些数据的统计和聚合问题,其中涉及到的坑和教训诸多,特此记录以备后用,亦希望能给新入职(入坑)的童鞋们一点参考。内容比较驳杂,姑且尽力来归类。
hive的左连接,右连接,内连接
假设:A表和B表,分别有key, value字段
A:
key | value |
---|---|
1 | 1 |
2 | 2 |
B
key | value |
---|---|
1 | 3 |
2 | 4 |
-
左连接 left join
语法:A left join B on 连接条件 where 筛选条件
示例:select * from A left join B on A.id = B.id where A.value >= 2
释义:以A表为准,把B表中id相同的数据拼接到A表中该id所在的行,并筛选出A中value>=2的部分
结果:key value_A value_B 2 2 4 注意:此时数据基准为left join 关键字左边的表
-
右连接 right join
语法:B left join A on 连接条件 where 筛选条件
示例:select * from B right join A on A.id = B.id where A.value >= 2
释义:以A表为准,把B表中id相同的数据拼接到A表中该id所在的行,并筛选出A中value>=2的部分
结果:key value_A value_B 2 2 4 注意:此时数据基准为right join 右边的表
-
内连接 inner join
语法:A inner join B on 连接条件 where 筛选条件
示例:select * from A inner join B on A.id = B.id where A.value >= 2
释义:选择A,B中相同id的数据,并筛选出A中value>=2的部分
结果:key value_A value_B 2 2 4 注意:此时没有基准表,类似于求A,B的交集
-
连接多张表
其实语法很类似,以左连接为例:
A left join B on A.id = B.id left join C on A.id = C.id
注意这么做以后数据拼接的比较慢,注意开销