新坑~~
最近幾個月,本人因爲工作原因一直在使用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
注意這麼做以後數據拼接的比較慢,注意開銷