hive左连接,右连接和内连接一张或多张表

新坑~~

最近几个月,本人因为工作原因一直在使用hadoop + hive + map/reduce 和shell脚本来处理一些数据的统计和聚合问题,其中涉及到的坑和教训诸多,特此记录以备后用,亦希望能给新入职(入坑)的童鞋们一点参考。内容比较驳杂,姑且尽力来归类。

hive的左连接,右连接,内连接
假设:A表和B表,分别有key, value字段
A:

key value
1 1
2 2

B

key value
1 3
2 4
  1. 左连接 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 关键字左边的表

  2. 右连接 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 右边的表

  3. 内连接 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的交集

  4. 连接多张表
    其实语法很类似,以左连接为例:
    A left join B on A.id = B.id left join C on A.id = C.id
    注意这么做以后数据拼接的比较慢,注意开销

你可能感兴趣的:(笔记)