精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Hive 中的四種排序詳解,再也不會混淆用法了

大數(shù)據(jù)
排序操作是一個(gè)比較常見的操作,尤其是在數(shù)據(jù)分析的時(shí)候,我們往往需要對數(shù)據(jù)進(jìn)行排序,hive 中和排序相關(guān)的有四個(gè)關(guān)鍵字,今天我們就看一下,它們都是什么作用。

 [[374234]]

本文轉(zhuǎn)載自微信公眾號「Java大數(shù)據(jù)與數(shù)據(jù)倉庫」,作者劉不二。轉(zhuǎn)載本文請聯(lián)系Java大數(shù)據(jù)與數(shù)據(jù)倉庫公眾號。   

Hive 中的四種排序

排序操作是一個(gè)比較常見的操作,尤其是在數(shù)據(jù)分析的時(shí)候,我們往往需要對數(shù)據(jù)進(jìn)行排序,hive 中和排序相關(guān)的有四個(gè)關(guān)鍵字,今天我們就看一下,它們都是什么作用。

數(shù)據(jù)準(zhǔn)備

下面我們有一份溫度數(shù)據(jù),tab 分割

  1. 2008    32.0 
  2. 2008    21.0 
  3. 2008    31.5 
  4. 2008    17.0 
  5. 2013    34.0 
  6. 2015    32.0 
  7. 2015    33.0 
  8. 2015    15.9 
  9. 2015    31.0 
  10. 2015    19.9 
  11. 2015    27.0 
  12. 2016    23.0 
  13. 2016    39.9 
  14. 2016    32.0 

建表加載數(shù)據(jù)

  1. create table ods_temperature( 
  2.     `yearint
  3.     temper float 
  4. row format delimited fields terminated by '\t'
  5. load data local inpath '/Users/liuwenqiang/workspace/hive/temperature.data' overwrite into table ods_temperature; 

1. order by(全局排序)

order by會對輸入做全局排序,因此只有一個(gè)Reducer(多個(gè)Reducer無法保證全局有序),然而只有一個(gè)reducer,會導(dǎo)致當(dāng)輸入規(guī)模較大時(shí),消耗較長的計(jì)算時(shí)間。

  • 降序:desc
  • 升序:asc 不需要指定,默認(rèn)是升序

需要注意的是它受hive.mapred.mode的影響,在嚴(yán)格模式下,必須使用limit 對排序的數(shù)據(jù)量進(jìn)行限制,因?yàn)閿?shù)據(jù)量很大只有一個(gè)reducer的話,會出現(xiàn)OOM 或者運(yùn)行時(shí)間超長的情況,所以嚴(yán)格模式下,不適用limit 則會報(bào)錯(cuò),更多請參考Hive的嚴(yán)格模式和本地模式。

  1. Error: Error while compiling statement: FAILED: SemanticException 1:39 Order by-s without limit are disabled for safety reasons. If you know what you are doing, please set hive.strict.checks.orderby.no.limit to false and make sure that hive.mapred.mode is not set to 'strict' to proceed. Note that you may get errors or incorrect results if you make a mistake while using some of the unsafe features.. Error encountered near token 'year' (state=42000,code=40000) 

接下來我們看一下order by的排序結(jié)果select * from ods_temperature order by year;

2. sort by(分區(qū)內(nèi)排序)

不是全局排序,其在數(shù)據(jù)進(jìn)入reducer前完成排序,也就是說它會在數(shù)據(jù)進(jìn)入reduce之前為每個(gè)reducer都產(chǎn)生一個(gè)排序后的文件。因此,如果用sort by進(jìn)行排序,并且設(shè)置mapreduce.job.reduces>1,則sort by只保證每個(gè)reducer的輸出有序,不保證全局有序。

它不受Hive.mapred.mode屬性的影響,sort by的數(shù)據(jù)只能保證在同一個(gè)reduce中的數(shù)據(jù)可以按指定字段排序。使用sort by你可以指定執(zhí)行的reduce個(gè)數(shù)(通過set mapred.reduce.tasks=n來指定),對輸出的數(shù)據(jù)再執(zhí)行歸并排序,即可得到全部結(jié)果。

  1. set mapred.reduce.tasks=3; 
  2. select * from ods_temperature sort by year

發(fā)現(xiàn)上面的輸出好像看不出來啥,只能看到不是有序的,哈哈,那我們換一種方法,將數(shù)據(jù)輸出到文件,因?yàn)槲覀冊O(shè)置了reduce數(shù)是3,那應(yīng)該會有三個(gè)文件輸出。

  1. set mapred.reduce.tasks=3; 
  2. insert overwrite local directory '/Users/liuwenqiang/workspace/hive/sort' row format delimited fields terminated by '\t' select * from ods_temperature sort by year

可以看出這下就清楚多了,我們看到一個(gè)分區(qū)內(nèi)的年份并不同意,那個(gè)年份的數(shù)據(jù)都有。

sort by 和order by 的執(zhí)行效率

首先我們看一個(gè)現(xiàn)象,一般情況下我們認(rèn)為sort by 應(yīng)該是比 order by 快的,因?yàn)?order by 只能使用一個(gè)reducer,進(jìn)行全部排序,但是當(dāng)數(shù)據(jù)量比較小的時(shí)候就不一定了,因?yàn)閞educer 的啟動耗時(shí)可能遠(yuǎn)遠(yuǎn)數(shù)據(jù)處理的時(shí)間長,就像下面的例子order by 是比sort by快的。

sort by 中的limt

可以在sort by 用limit子句減少數(shù)據(jù)量,使用limit n 后,傳輸?shù)絩educe端的數(shù)據(jù)記錄數(shù)就減少到 n *(map個(gè)數(shù)),也就是說我們在sort by 中使用limit 限制的實(shí)際上是每個(gè)reducer 中的數(shù)量,然后再根據(jù)sort by的排序字段進(jìn)行order by,最后返回n 條數(shù)據(jù)給客戶端,也就是說你在sort by 用limit子句,最后還是會使用order by 進(jìn)行最后的排序。

order by 中使用limit 是對排序好的結(jié)果文件去limit 然后交給reducer,可以看到sort by 中l(wèi)imit 子句會減少參與排序的數(shù)據(jù)量,而order by 中的不行,只會限制返回客戶端數(shù)據(jù)量的多少。

從上面的執(zhí)行效率,我們看到sort by limit 幾乎是 order by limit 的兩倍了 ,大概猜出來應(yīng)該是多了某個(gè)環(huán)節(jié)。

接下來我們分別看一下order by limit 和 sort by limit 的執(zhí)行計(jì)劃

  1. explain select * from ods_temperature order by year limit 2; 

  1. explain select * from ods_temperature sort by year limit 2; 

從上面截圖我圈出來的地方可以看到

sort by limit 比 order by limit 多出了一個(gè)stage(order limit)

sort by limit 實(shí)際上執(zhí)行了兩次limit ,減少了參與排序的數(shù)據(jù)量

3. distribute by(數(shù)據(jù)分發(fā))

distribute by是控制在map端如何拆分?jǐn)?shù)據(jù)給reduce端的。類似于MapReduce中分區(qū)partationer對數(shù)據(jù)進(jìn)行分區(qū)

hive會根據(jù)distribute by后面列,將數(shù)據(jù)分發(fā)給對應(yīng)的reducer,默認(rèn)是采用hash算法+取余數(shù)的方式。

sort by為每個(gè)reduce產(chǎn)生一個(gè)排序文件,在有些情況下,你需要控制某寫特定的行應(yīng)該到哪個(gè)reducer,這通常是為了進(jìn)行后續(xù)的聚集操作。distribute by剛好可以做這件事。因此,distribute by經(jīng)常和sort by配合使用。

例如上面的sort by 的例子中,我們發(fā)現(xiàn)不同年份的數(shù)據(jù)并不在一個(gè)文件中,也就說不在同一個(gè)reducer 中,接下來我們看一下如何將相同的年份輸出在一起,然后按照溫度升序排序

首先我們嘗試一下沒有distribute by 的SQL的實(shí)現(xiàn)

  1. insert overwrite local directory '/Users/liuwenqiang/workspace/hive/sort' row format delimited fields terminated by '\t'  select * from ods_temperature sort by temper ; 

發(fā)現(xiàn)結(jié)果并沒有把相同年份的數(shù)據(jù)分配在一起,接下來我們使用一下distribute by

  1. insert overwrite local directory '/Users/liuwenqiang/workspace/hive/sort' row format delimited fields terminated by '\t'  
  2. select * from ods_temperature distribute by year sort by temper ; 

這下我們看到相同年份的都放在了一下,可以看出2013 和 2016 放在了一起,但是沒有一定順序,這個(gè)時(shí)候我們可以對 distribute by 字段再進(jìn)行一下排序

  1. insert overwrite local directory '/Users/liuwenqiang/workspace/hive/sort' row format delimited fields terminated by '\t'  
  2. select * from ods_temperature distribute by year sort by year,temper ; 

4. cluster by

cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是升序排序,不能指定排序規(guī)則為ASC或者DESC。

當(dāng)分區(qū)字段和排序字段相同cluster by可以簡化distribute by+sort by 的SQL 寫法,也就是說當(dāng)distribute by和sort by 字段相同時(shí),可以使用cluster by 代替distribute by和sort by

  1. insert overwrite local directory '/Users/liuwenqiang/workspace/hive/sort' row format delimited fields terminated by '\t'  
  2. select * from ods_temperature  distribute by year sort by year ; 

  1. insert overwrite local directory '/Users/liuwenqiang/workspace/hive/sort' row format delimited fields terminated by '\t'  
  2. select * from ods_temperature cluster by year

我們看到上面兩種SQL寫法的輸出結(jié)果是一樣的,這也就證明了我們的說法,當(dāng)distribute by和sort by 字段相同時(shí),可以使用cluster by 代替distribute by和sort by

當(dāng)你嘗試給cluster by 指定排序方向的時(shí)候,你就會得到如下錯(cuò)誤。

  1. Error: Error while compiling statement: FAILED: ParseException line 2:46 extraneous input 'desc' expecting EOF near '<EOF>' (state=42000,code=40000) 

總結(jié)

order by 是全局排序,可能性能會比較差;

sort by分區(qū)內(nèi)有序,往往配合distribute by來確定該分區(qū)都有那些數(shù)據(jù);

distribute by 確定了數(shù)據(jù)分發(fā)的規(guī)則,滿足相同條件的數(shù)據(jù)被分發(fā)到一個(gè)reducer;

cluster by 當(dāng)distribute by和sort by 字段相同時(shí),可以使用cluster by 代替distribute by和sort by,但是cluster by默認(rèn)是升序,不能指定排序方向;

sort by limit 相當(dāng)于每個(gè)reduce 的數(shù)據(jù)limit 之后,進(jìn)行order by 然后再limit ;

 

責(zé)任編輯:武曉燕 來源: Java大數(shù)據(jù)與數(shù)據(jù)倉庫
相關(guān)推薦

2018-08-29 14:56:42

SSD接口固態(tài)硬盤

2018-02-07 08:01:20

windows微軟windows 10

2018-03-16 10:34:56

Android P預(yù)覽版谷歌

2021-03-03 12:19:20

原型原型鏈JavaScript

2021-06-04 12:05:03

Redis Bitmap 數(shù)據(jù)庫

2020-12-10 10:20:32

CentOS 8RHELLinux

2025-04-15 08:25:00

網(wǎng)絡(luò)分層網(wǎng)絡(luò)分層模型網(wǎng)絡(luò)

2021-10-29 13:40:36

Python Gif 工具

2019-04-08 17:04:23

安卓安卓手機(jī)谷歌

2011-12-30 13:15:53

Java

2017-10-24 10:54:28

網(wǎng)絡(luò)安全手機(jī)微信、支付寶

2010-08-05 13:44:12

Flex布局

2020-01-21 21:15:16

WiFi網(wǎng)絡(luò)WiFi6

2018-07-04 11:02:23

無線傳輸模式

2014-12-25 09:41:15

Android加載方式

2024-05-21 14:04:16

2019-10-24 07:42:28

Java引用GC

2022-12-13 09:59:25

計(jì)算遷移

2021-06-24 17:55:40

Python 開發(fā)編程語言

2025-05-26 03:21:00

Dify變量組件
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

欧美精选在线播放| 国产精品不卡在线| 欧美在线免费观看| 337人体粉嫩噜噜噜| 中文字幕日本一区| 亚洲va在线va天堂| 视频一区国产精品| 亚洲精品国产一区二| 久久精品九九| 欧美不卡视频一区发布| 久久精品一区二区免费播放| 亚洲狼人在线| 欧美性猛交xxxx偷拍洗澡| dy888午夜| 国产在线小视频| 国产1区2区3区精品美女| 国产精品旅馆在线| 久久精品久久精品久久| 三级电影一区| 日韩精品电影网| 中文字幕1234区| 成人激情综合| 亚洲成人激情综合网| 中文字幕制服丝袜在线| 手机看片福利在线观看| 高清不卡在线观看av| 国产精品亚洲网站| 中文字幕视频网| 一区在线视频观看| 久久精品一区中文字幕| 摸摸摸bbb毛毛毛片| 国产精品男女| 欧美α欧美αv大片| 日本超碰在线观看| 欧美日韩在线精品一区二区三区激情综合| 亚洲综合色噜噜狠狠| 国产精品亚洲天堂| av中文字幕在线| 久久精品人人做| 久久波多野结衣| 神马午夜在线观看| 成人综合婷婷国产精品久久| 亚洲va欧美va国产综合久久| 亚洲天堂视频在线| 免费视频最近日韩| 国产精品网站大全| 国产偷人爽久久久久久老妇app| 国产情侣久久| 欧美专区在线观看| 久久久久久久久久久久久av| 亚洲承认在线| 4438全国成人免费| 中文字幕免费在线观看视频| 一本不卡影院| 欧美在线激情网| 久久久久女人精品毛片九一| 乱码第一页成人| 国产精品91久久| 在线免费一区二区| 免费在线观看精品| 成人免费午夜电影| 国内老熟妇对白hdxxxx| 国产成人午夜片在线观看高清观看| 96sao精品视频在线观看| 精品国产亚洲av麻豆| 国产福利精品导航| 国产精品美女久久久久av福利| 亚洲黄色小说网| 不卡电影一区二区三区| 美脚丝袜一区二区三区在线观看| 牛牛热在线视频| 中文在线免费一区三区高中清不卡| 亚洲一区二区自拍偷拍| 国产激情在线视频| 亚洲成a人v欧美综合天堂下载| 国产精品久久久久999| 久久精品无码av| 日韩不卡在线观看日韩不卡视频| 国产精品免费在线免费| 国产精品视频一区二区三区,| 国产一区二区不卡| 国产欧美日韩伦理| 国产福利在线观看| 亚洲另类春色国产| 大j8黑人w巨大888a片| 欧美福利在线播放| 欧美一区二区精美| 国内精品久久99人妻无码| 成人无号精品一区二区三区| 久久99精品久久久久久青青91| 欧美成人aaaaⅴ片在线看| 日韩精品一级中文字幕精品视频免费观看| 日韩中文首页| 《视频一区视频二区| 色爽爽爽爽爽爽爽爽| 999福利在线视频| 欧美自拍丝袜亚洲| 性一交一黄一片| 蜜乳av综合| 久久国产精品久久久久久| 精品国产乱码一区二区| 久久电影国产免费久久电影| 国产女主播一区二区三区| 国产女主播在线直播| 亚洲精品乱码久久久久久久久| 日本精品免费在线观看| 欧美高清免费| 亚洲开心激情网| 欧美黑人一级片| 美女性感视频久久| 精品国产一区二区三区麻豆免费观看完整版 | 亚洲最大免费视频| 久久久久久久久久久9不雅视频| 97免费视频在线播放| 国产视频在线一区| 国产欧美一区视频| 夫妻免费无码v看片| 日韩08精品| 日日骚久久av| 成人一级免费视频| 99热99精品| 黄色三级中文字幕| 精品国产一区二区三区2021| 亚洲人线精品午夜| 亚洲综合一二三| 国产成人午夜高潮毛片| 中文字幕在线亚洲三区| 小黄鸭精品aⅴ导航网站入口| 亚洲精品一区二区三区精华液| 我要看黄色一级片| 久久国产精品第一页| 清纯唯美一区二区三区| 欧美激情网站| 亚洲国产成人一区| 亚洲精品午夜久久久久久久| 国产精品自拍三区| 四虎影院一区二区| 日韩在线激情| xxx一区二区| 在线免费av网| 国产精品久久久久久久久免费樱桃 | 在线观看男女av免费网址| 欧美乱妇一区二区三区不卡视频| 免费看91的网站| 蜜臀av一区二区在线观看| 热re99久久精品国99热蜜月| a日韩av网址| 国产视频亚洲视频| 免费av中文字幕| 国产三级一区二区| 污视频免费在线观看网站| 国产日产精品一区二区三区四区的观看方式 | 国产成人在线免费观看| 国产精品国产三级国产专区51| 国产免费av国片精品草莓男男| 久久精品99无色码中文字幕| 国产模特av私拍大尺度| 亚洲欧美日韩精品久久久久| 男人女人拔萝卜视频| 国产综合色产| 久久精品国产一区二区三区不卡| 周于希免费高清在线观看 | 麻豆网在线观看| 欧美电影一区二区| 精品国产乱码久久久久久鸭王1| 高清av一区二区| 国产极品在线视频| 国产精品中文字幕亚洲欧美| 国产精品一区二区三区久久| 黄色在线播放网站| 亚洲精品在线电影| 国产剧情在线视频| 中文字幕不卡在线播放| 午夜诱惑痒痒网| 一本色道久久综合亚洲精品高清| 免费成人看片网址| 四虎视频在线精品免费网址| 九九热最新视频//这里只有精品| 日韩在线视频免费| 欧美在线一区二区三区| 天天看片中文字幕| 91在线观看视频| 精品久久久99| 亚洲第一伊人| 亚洲午夜精品一区二区三区| 97一区二区国产好的精华液| 日av在线播放中文不卡| 男人的天堂在线视频免费观看 | 91激情视频在线观看| 久久草av在线| 无罩大乳的熟妇正在播放| 91蜜臀精品国产自偷在线| 成人资源视频网站免费| 新片速递亚洲合集欧美合集| 久久国产精品99国产精| 外国精品视频在线观看 | 黄色网在线看| 亚洲欧美一区二区精品久久久| 怡红院成永久免费人全部视频| 亚洲自拍欧美精品| 国产午夜精品福利视频| 成人av资源在线| 激情文学亚洲色图| 翔田千里一区二区| 国产专区在线视频| 成人精品中文字幕| 精品国产一区二区三区免费 | 阿v视频在线| 日韩中文字幕第一页| 午夜视频福利在线| 日韩一级高清毛片| 亚洲精品91天天久久人人| 亚洲综合久久久久| 极品色av影院| 国产亚洲综合色| av黄色一级片| 国产一区二区0| 欧美成人三级在线播放| 噜噜噜久久亚洲精品国产品小说| 青青草国产免费| 一本一道久久a久久精品蜜桃| 日本免费高清一区| 日本欧美韩国国产| 国产麻豆日韩| 凹凸av导航大全精品| 91欧美激情另类亚洲| 国产成人免费精品| 国产精品福利小视频| 一个人www视频在线免费观看| 欧美激情在线观看视频| bt在线麻豆视频| 久久久国产在线视频| 91在线看黄| 伊人激情综合网| 番号集在线观看| 在线亚洲欧美视频| 超碰在线影院| 中文字幕日韩av电影| 国产精品影院在线| 国产亚洲欧美视频| 成人三级黄色免费网站| 国产亚洲视频在线观看| 国产区视频在线播放| 国产一区二区三区精品久久久 | 亚洲av无码国产综合专区| 欧美电影在线免费观看| 国产精品乱码久久久| 欧美日本免费一区二区三区| 国产原创中文av| 91精品国产一区二区三区香蕉| 国产又粗又长又黄| 91精品国产丝袜白色高跟鞋| 97caocao| 欧美成人高清电影在线| 国产 欧美 自拍| 国产丝袜一区二区| 美丽的姑娘在线观看免费动漫| 亚洲欧美日韩国产中文| 国产视频在线看| 中文字幕亚洲一区二区三区五十路| 午夜激情视频在线| 久久中文字幕在线视频| 免费网站在线观看人| 97精品视频在线观看| 久久电影tv| 国产精品视频一| 成人在线分类| 国产精品日韩欧美一区二区三区| 香蕉国产成人午夜av影院| 水蜜桃一区二区三区| 久久久久美女| 欧美精品久久久久久久久久久| 国产免费成人| 五月天视频在线观看| 国产乱一区二区| 国产精品福利导航| 国产精品三级电影| 欧美片一区二区| 一本一本久久a久久精品综合麻豆| 中文字幕乱码无码人妻系列蜜桃| 日韩一区二区视频| 少妇又色又爽又黄的视频| 中文字幕九色91在线| 九色91在线| 国产精品美女午夜av| 91成人噜噜噜在线播放| 日本不卡二区| 欧美欧美全黄| 99视频免费播放| 国产iv一区二区三区| 亚洲无人区码一码二码三码的含义 | 久久电影tv| 99国精产品一二二线| 免费成人高清在线视频theav| 在线一区高清| 鲁大师影院一区二区三区| 又大又长粗又爽又黄少妇视频| 久久久久久久久久久电影| 欧美日韩精品亚洲精品| 欧美午夜精品久久久久久孕妇| 亚洲高清视频在线播放| 中文欧美日本在线资源| av资源中文在线| 亚洲一区二区三区四区在线播放| 久久av资源| 免费在线看黄色片| 久久99久久99| 一区二区三区久久久久| 亚洲综合偷拍欧美一区色| 91高潮大合集爽到抽搐| 亚洲精品自拍视频| 成人三级小说| 亚洲xxxx18| 欧美wwwww| 免费看污黄网站| 久久久精品tv| 日韩 欧美 综合| 欧美mv日韩mv| 在线看三级电影| 91热精品视频| 99久久www免费| 天天干天天干天天干天天干天天干| 99天天综合性| 日韩欧美亚洲一区二区三区| 日韩精品一区二区三区在线播放| 暖暖日本在线观看| 国产免费成人av| 日韩精品dvd| 麻豆三级在线观看| 久久精品一区二区三区av| 亚洲天堂一区在线观看| 亚洲国产日韩欧美在线99| 日本三级在线观看网站| 亚洲xxxx3d| 午夜国产欧美理论在线播放 | 粗暴蹂躏中文一区二区三区| 久久电影天堂| 亚洲欧美电影在线观看| 日本不卡一区二区三区高清视频| 欧美做受高潮6| 日韩欧美在线免费| 精品美女视频在线观看免费软件| 欧美一级淫片aaaaaaa视频| 欧美成人基地| 国产一区二区三区精彩视频| 99精品国产99久久久久久白柏| 欧美一二三区视频| 精品小视频在线| 三上悠亚亚洲一区| 亚洲国产欧美日韩| 久久国产精品区| 玖玖爱免费视频| 亚洲国产小视频在线观看| 美女搞黄视频在线观看| 欧美二区在线看| 日本sm残虐另类| 久久成人小视频| 精品精品欲导航| 在线亚洲人成| 亚洲欧洲中文| 国产精品77777竹菊影视小说| 久久影院一区二区| 日韩精品亚洲精品| 欧美香蕉视频| 中文字幕在线亚洲三区| 国产91丝袜在线播放| 欧美亚洲精品天堂| 深夜福利91大全| 亚洲一区二区三区在线免费| 欧美男女爱爱视频| 久久久亚洲欧洲日产国码αv| 一区二区三区免费在线| 欧美成人在线免费| 亚洲aa在线| 国产探花在线看| 亚洲成年人网站在线观看| 国产中文在线视频| 亚洲最大av在线| 国产日韩欧美三级| 蜜桃av.com| 日韩av在线网页| 91精品麻豆| 国产97在线 | 亚洲| 国产精品不卡一区| 香港一级纯黄大片| 91久久久亚洲精品| 香蕉久久久久久久av网站| 国产精品精品软件男同| 亚洲护士老师的毛茸茸最新章节| 韩日精品一区| 青草青青在线视频| 国产精品久久久久久亚洲毛片| 粉嫩av一区二区夜夜嗨| 日本久久91av| 国产一区二区三区四区三区四| 免费看污片的网站| 精品国产成人在线影院| 91精品福利观看| 密臀av一区二区三区| 亚洲国产欧美一区二区三区丁香婷|