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
    注意這麼做以後數據拼接的比較慢,注意開銷

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章