1.4.3.7 Hive的查詢操作

總目錄:http://www.reibang.com/p/e406a9bc93a9

Hadoop - 子目錄:http://www.reibang.com/p/9428e443b7fd

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[ORDER BY col_list]
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]]
[LIMIT number]

基礎(chǔ)查詢

全局查詢

全表查詢

select * from emp;
使用*號來表示全部列。

全表查詢

指定列查詢

select ename,job from emp;

指定列查詢

注意事項(xiàng)

(1)SQL 語言大小寫不敏感幕帆。
(2)SQL 可以寫在一行或者多行
(3)關(guān)鍵字不能被縮寫也不能分行
(4)各子句一般要分行寫常熙。
(5)使用縮進(jìn)提高語句的可讀性纽竣。

別名

select empno as id,ename as name from emp;

別名

使用關(guān)鍵字 as緊跟需要別名的列。

limit語句

LIMIT 子句用于限制返回的行數(shù)幽勒。
select * from emp limit 5;

limit

常用函數(shù)

  • count


    例子
  • max


    例子
  • min


    例子
  • sum


    例子
  • avg


    例子

運(yùn)算符

算術(shù)運(yùn)算符

常用算術(shù)運(yùn)算符一覽:

運(yùn)算符 描述
A+B A和B相加
A-B A和B相加
A*B A和B相加
A/B A和B相加
A%B A和B相加
A&B A和B相加
A丨B A和B相加
A^B A和B相加
~B A和B相加

select ename,sal*2 as sal from emp;

將所有員工工資翻倍

比較運(yùn)算符

常用比較運(yùn)算符一覽:

運(yùn)算符 支持的數(shù)據(jù)類型 描述
A=B 基礎(chǔ)數(shù)據(jù)類型 如果 A 等于 B 則返回 TRUE绅喉,反之返回 FALSE
A<=>B 基礎(chǔ)數(shù)據(jù)類型 如果 A 和 B 都為 NULL,則返回 TRUE排宰,其他的和等號(=)操作符的結(jié)果一致,如果任一為 NULL 則結(jié)果為 NULL
A!=B,A<>B 基礎(chǔ)數(shù)據(jù)類型 A 或者 B 為 NULL 則返回 NULL;如果 A 不等于 B,則返回 TRUE,反之返回 FALSE
A<B 基礎(chǔ)數(shù)據(jù)類型 A 或者 B 為 NULL,則返回 NULL童谒;如果 A 小于 B象浑,則返回 TRUE茫因,反之返回 FALSE
A>B 基礎(chǔ)數(shù)據(jù)類型 A 或者 B 為 NULL,則返回 NULL;如果 A 小于等于 B,則返回 TRUE园蝠,反之返回 FALSE
A<=B 基礎(chǔ)數(shù)據(jù)類型 A 或者 B 為 NULL陪汽,則返回 NULL赞庶;如果 A 大于 B,則返回 TRUE,反之返回 FALSE
A>=B 基礎(chǔ)數(shù)據(jù)類型 A 或者 B 為 NULL,則返回 NULL;如果 A 大于等于 B,則返回 TRUE突琳,反之返回 FALSE
A [NOT] BETWEEN B AND C 基礎(chǔ)數(shù)據(jù)類型 如果 A啊终,B 或者 C 任一為 NULL泰讽,則結(jié)果為 NULL梦抢。如果 A 的值大于等于 B 而且小于或等于 C蕊梧,則結(jié)果為 TRUE霞赫,反之為 FALSE。如果使用 NOT 關(guān)鍵字則可達(dá)到相反的效果
A IS NULL 所有數(shù)據(jù)類型 如果 A 等于 NULL肥矢,則返回 TRUE端衰,反之返回 FALSE
A IS NOT NULL 所有數(shù)據(jù)類型 如果 A 不等于 NULL,則返回 TRUE橄抹,反之返回 FALSE
IN(數(shù)值 1, 數(shù)值 2) 所有數(shù)據(jù)類型 使用 IN 運(yùn)算顯示列表中的值靴迫。
A [NOT] LIKE B STRING類型 B 是一個 SQL 下的簡單正則表達(dá)式惕味,如果 A 與其匹配的話楼誓,則返回 TRUE;反之返回 FALSE名挥。如果使用 NOT 關(guān)鍵字則可達(dá)到相反的效果疟羹。
A RLIKE B, A REGEXP B STRING類型 B 是一個使用jdk正則接口實(shí)現(xiàn)的正則表達(dá)式,如果 A 與其匹配禀倔,則返回 TRUE榄融;反之返回FALSE。
  • 查詢出薪水等于 5000 的所有員工
    select * from emp where sal =5000;
  • 查詢工資在 500 到 1000 的員工信息
    select * from emp where sal between 500 and 1000;
  • 查詢 comm 為空的所有員工信息
    select * from emp where comm is null;
  • 查詢工資是 1500 或 5000 的員工信息
    select * from emp where sal IN (1500, 5000);
  • 查找以 2 開頭薪水的員工信息
    select * from emp where sal LIKE '2%';
  • 查找薪水中含有 2 的員工信息
    select * from emp where sal RLIKE '[2]';

邏輯運(yùn)算符

常用邏輯運(yùn)算符一覽:

運(yùn)算符 描述
AND
OR
NOT
  • 查詢薪水大于 1000救湖,部門是 30
    select * from emp where sal>1000 and deptno=30;
  • 查詢薪水大于 1000愧杯,或者部門是 30
    select * from emp where sal>1000 or deptno=30;
  • 查詢除了 20 部門和 30 部門以外的員工信息
    select * from emp where deptno not IN(30, 20);

join操作

等值Join

Hive 支持通常的 SQL JOIN 語句,但是只支持等值連接鞋既,不支持非等值連接力九。

  • 根據(jù)員工表和部門表中的部門編號相等耍铜,查詢員工編號、員工名稱和部門名稱
    select e.empno, e.ename, d.deptno, d.dname from emp e join dept d on e.deptno = d.deptno;

內(nèi)連接

內(nèi)連接:只有進(jìn)行連接的兩個表中都存在與連接條件相匹配的數(shù)據(jù)才會被保留下來跌前。
select e.empno, e.ename, d.deptno from emp e join dept d on e.deptno = d.deptno;

左外連接

左外連接:JOIN 操作符左邊表中符合 WHERE 子句的所有記錄將會被返回棕兼。
select e.empno, e.ename, d.deptno from emp e left join dept d on e.deptno = d.deptno;

右外連接

右外連接:JOIN 操作符右邊表中符合 WHERE 子句的所有記錄將會被返回。
select e.empno, e.ename, d.deptno from emp e right join dept d on e.deptno = d.deptno;

滿外連接

滿外連接:將會返回所有表中符合 WHERE 語句條件的所有記錄抵乓。如果任一表的指定字段沒有符合條件的值的話伴挚,那么就使用 NULL 值替代。
select e.empno, e.ename, d.deptno from emp e full join dept d on e.deptno = d.deptno;

多表連接

注意:連接 n 個表灾炭,至少需要 n-1 個連接條件茎芋。例如:連接三個表,至少需要兩個連接條件咆贬。
SELECT a.name, b.age, c.gender FROM a1 a JOIN b1 b ON b.deptno = a.deptno JOIN c1 c ON c.loc = c.loc;

分組查詢

Group By 語句

GROUP BY 語句通常會和聚合函數(shù)一起使用败徊,按照一個或者多個列隊(duì)結(jié)果進(jìn)行分組,然后對每個組執(zhí)行聚合操作掏缎。

  • 計(jì)算 emp 表每個部門的平均工資
    select t.deptno, avg(t.sal) avg_sal from emp t group by t.deptno;

  • 計(jì)算 emp 每個部門中每個崗位的最高薪水
    select t.deptno, t.job, max(t.sal) max_sal from emp t group by t.deptno, t.job;

Having語句

having和where的不同點(diǎn):
(1)where 針對表中的列發(fā)揮作用皱蹦,查詢數(shù)據(jù);having 針對查詢結(jié)果中的列發(fā)揮作用眷蜈,
篩選數(shù)據(jù)沪哺。
(2)where 后面不能寫聚合函數(shù),而 having 后面可以使用聚合函數(shù)酌儒。
(3)having 只用于 group by 分組統(tǒng)計(jì)語句辜妓。

  • 求每個部門的平均薪水大于 2000 的部門
    select deptno, avg(sal) avg_sal from emp group by deptno having avg_sal > 2000;

排序

ORDER BY語句

  • 查詢員工信息按工資升序排列
    select * from emp order by sal;
  • 查詢員工信息按工資降序排列
    select * from emp order by sal desc;

多列排序

select ename, deptno, sal from emp order by deptno, sal ;

Sort By語句

Sort By:每個 Reducer 內(nèi)部進(jìn)行排序,對全局結(jié)果集來說不是排序忌怎。
首先我們要設(shè)置一下reduce的數(shù)量籍滴。
set mapreduce.job.reduces=3;
當(dāng)然,我們也可以查看當(dāng)前設(shè)置的reduce數(shù)量榴啸。
set mapreduce.job.reduces;

隨便查詢一下
select * from emp sort by empno desc;


reduce是分了三個階段孽惰。


截圖的第一行中,map數(shù)量1鸥印,reduce數(shù)量3勋功。

Distribute By語句

Distribute By:類似 MR 中 partition,進(jìn)行分區(qū)库说,結(jié)合 sort by 使用狂鞋。

  • 先按照部門編號分區(qū),再按照員工編號降序排序潜的。
    select * from emp distribute by deptno sort by empno desc;

Cluster By語句

當(dāng) distribute by 和 sorts by 字段相同時骚揍,可以使用 cluster by 方式。
cluster by 除了具有 distribute by 的功能外還兼具 sort by 的功能啰挪。但是排序只能是升序排序信不,不能指定排序規(guī)則為 ASC 或者 DESC纤掸。
比如下面兩種寫法是等價的。
select * from emp cluster by deptno;
select * from emp distribute by deptno sort by deptno;

分桶

分桶表

  • 創(chuàng)建分桶表
create table stu_buck(id int, name string)
clustered by(id) into 4 buckets
row format delimited fields terminated by '\t';
  • 創(chuàng)建個普通表
create table stu(id int, name string)
row format delimited fields terminated by '\t';
  • 導(dǎo)入數(shù)據(jù)
load data local inpath '/usr/hdk/student.txt' into table stu;

數(shù)據(jù)集關(guān)注微信公眾號hx_bigdata,回復(fù)1437.

  • 設(shè)置兩個屬性
set hive.enforce.bucketing=true;
set mapreduce.job.reduces=-1;
  • 子查詢導(dǎo)入數(shù)據(jù)
insert into table stu_buck select id, name from stu;
四個桶

抽樣查詢

對于非常大的數(shù)據(jù)集浑塞,有時用戶需要使用的是一個具有代表性的查詢結(jié)果而不是全部結(jié)果借跪。Hive 可以通過對表進(jìn)行抽樣來滿足這個需求。
語法:TABLESAMPLE(BUCKET x OUT OF y)
y 必須是 table 總 bucket 數(shù)的倍數(shù)或者因子酌壕。hive 根據(jù) y 的大小掏愁,決定抽樣的比例。
例如卵牍,table 總共分了 4 份果港,當(dāng) y=2 時,抽取(4/2=)2 個 bucket 的數(shù)據(jù)糊昙,當(dāng) y=8 時辛掠,抽取(4/8=)1/2
個 bucket 的數(shù)據(jù)。
x 表示從哪個 bucket 開始抽取释牺,如果需要取多個分區(qū)萝衩,以后的分區(qū)號為當(dāng)前分區(qū)號加上y。
例如没咙,table 總 bucket 數(shù)為 4猩谊,tablesample(bucket 1 out of 2),表示總共抽燃栏铡(4/2=)2 個bucket 的數(shù)據(jù)牌捷,抽取第 1(x)個和第 3(x+y)個 bucket 的數(shù)據(jù)。

  • 抽取一個桶
    select * from stu_buck tablesample(bucket 1 out of 4 on id);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末涡驮,一起剝皮案震驚了整個濱河市暗甥,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捉捅,老刑警劉巖撤防,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異锯梁,居然都是意外死亡即碗,警方通過查閱死者的電腦和手機(jī)焰情,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門陌凳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人内舟,你說我怎么就攤上這事合敦。” “怎么了验游?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵充岛,是天一觀的道長保檐。 經(jīng)常有香客問我,道長崔梗,這世上最難降的妖魔是什么夜只? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蒜魄,結(jié)果婚禮上扔亥,老公的妹妹穿的比我還像新娘。我一直安慰自己谈为,他們只是感情好旅挤,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著伞鲫,像睡著了一般粘茄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上秕脓,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天柒瓣,我揣著相機(jī)與錄音,去河邊找鬼吠架。 笑死嘹朗,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诵肛。 我是一名探鬼主播屹培,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怔檩!你這毒婦竟也來了褪秀?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤薛训,失蹤者是張志新(化名)和其女友劉穎媒吗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體乙埃,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闸英,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了介袜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片甫何。...
    茶點(diǎn)故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖遇伞,靈堂內(nèi)的尸體忽然破棺而出辙喂,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布巍耗,位于F島的核電站秋麸,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏炬太。R本人自食惡果不足惜灸蟆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望亲族。 院中可真熱鬧次乓,春花似錦、人聲如沸孽水。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽女气。三九已至杏慰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間炼鞠,已是汗流浹背缘滥。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留谒主,地道東北人朝扼。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像霎肯,于是被迫代替她去往敵國和親擎颖。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 引出 ?請思考如下問題观游? –查詢所有員工的每個月工資總和搂捧,平均工資? –查詢工資最高和最低的工資是多少懂缕? –查詢公...
    C_cole閱讀 7,292評論 0 3
  • 1. select * from emp; 2. select empno, ename, job from em...
    海納百川_4d26閱讀 1,908評論 0 4
  • 查詢是數(shù)據(jù)的一個重要操作允跑。用戶發(fā)送查詢請求,經(jīng)編譯軟件變異成二進(jìn)制文件供服務(wù)器查詢搪柑,后返回查詢結(jié)果集給用戶聋丝,查詢會...
    產(chǎn)品小正閱讀 1,390評論 0 2
  • ORACLE自學(xué)教程 --create tabletestone ( id number, --序號usernam...
    落葉寂聊閱讀 1,083評論 0 0
  • ?最近學(xué)區(qū)房的話題非常非常熱弱睦,大多數(shù)人都覺得自己夠一夠,還是可以的倚喂,有過希望每篷,只是都錯過了。 比如這樣的思緒總會冒...
    教在美國閱讀 354評論 0 1