hive中 order by ,distribute by ,cluster by ,sort by 區別
阿新 • • 發佈:2018-12-04
id | name | old |
1 | 張三 | 10 |
1 | 李四 | 15 |
3 | 王五 | 20 |
4 | 趙六 | 25 |
假設表中3個欄位
order by old
展現出的資料將會根據old 這一列降序返回4條記錄,不具備任何形式的資料分佈
select * from table order by old desc
4 趙 25
3 王 20
1 李 15
1 張 10
distribute by
map reduce 中,map 端將資料按 欄位 分佈 分發給 reduce 確保 每個reduce 收到的值 是相同的。具備分佈的特性
distibute by id asc 則會將 資料相同的 分發到 一個 reduce 內。具體怎麼實現,欄位的雜湊值/reduce個數 然後取餘,餘數相同歸為一起
sort by
一般 和 distribute 聯用,達到分佈資料,並按照 指定列進行排序
cluster by
將資料按照指定列分佈後降序 排序分發到各個reduce中
用cluster by 預設指的是 欄位 降序 分發,降序排序
例子
select * from table distribute by id sort by id desc
和
select * from table cluster by id 具備同樣效果
--結果
4 趙 25
3 王 20
1 李 15
1 張 10
例子
select * from table cluster by id sort by old asc
--bucket 1
4 趙 25
--bucket 2
3 王 20
1 張 10
1 李 15