Hive的資料查詢

2021-08-14 07:00:32 字數 3407 閱讀 7184

與mysql和oracle中的sql語句不一樣地方會特別標註

hive簡單查詢

#宣告如下:

select [all|distinct] select_expr,select_expr,...

from table_reference

[where where_conditon]

[group

by col_list]

[cluster by col_list

|[distribute by col_list][sort by col_list]

|[order

by col_list]]

[limit number]

distribute by指定分發器(partitioner),多reducer可用

簡單查詢舉例:

–表示式

查詢員工資訊:員工號 姓名 月薪 年薪

select empno,ename,sal,sal*12

from emp;

–null,將空值轉換成0:用nvl(comm,0)

查詢員工資訊:員工號 姓名 月薪 年薪 獎金 年收入  

注:comm 有null的空值

select empno,ename,sal,sal*12,comm,sal*12+nvl(comm,0) from emp;

–查詢null空值:is null

查詢獎金為空的員工

select * from emp where comm=null; #報錯

select * from emp where comm is

null;

–使用distinct來去重

select

distinct depno from emp;

select

distinct depno,job from emp; #distinct作用於後面所有的列,即(depno,job)

註明:上面的查詢除了select * from emp;此語句不用mapreduce來分配任務,因為它只要查全表,而其它的例如表示式,排序等都要經過mapreduce來分配任務,來進行計算,排序等。

使用fetch簡單查詢

使用fetch直接在表中使用簡單查詢語句,不用經過mapreduce,沒有函式沒有排序就為簡單的查詢語句.

使用三種方法設定fetch task功能

方法1:

在hive的提示符下輸入下面的語句

hive> set hive.fetch

.task

.conversion=more;

方法2:

quit退出hive,在啟動hive之前執行hive --hiveconf ......表示是在後面啟動hive之後都可以用fetch做簡單查詢。這裡的--hiveconf是指設定hiveconf配置。語句如下:

macdeimac:bin mac$ hive --hiveconf hive.fetch

.task

.conversion=more

方法3:

在hive的安裝目錄的conf下面配置修改hive-site.xml檔案。

在configration中加入下面的配置

hive.fetch.task.converstionname>

morevalue>

property>

重新啟動hive,即已經生效

方法1和方法2只適用於當前的hive,若退出後,則失效。方法3是配置永久的fetch task。

hive過濾查詢

–字串查詢

--查詢名叫king的員工

select * from emp where ename='king';

–大小寫不通用,嚴格區別字串的大小寫

select * from emp where ename='king';
–like模糊查詢

查詢名字以s打頭的員工

select empno,ename sal from emp where ename like

'%s'

–包含下劃線查詢

用轉義字元\,第乙個\表示的是轉義字元的含義,第二個\表示的這個轉義字元是什麼

查詢中間含有『_』的員工

select empno,ename sal from emp where ename like

'%_%';

#它把所有資料都查出來了,因為_代表的是任意乙個字元

select empno,ename sal from emp where ename like

'%\\_%';

hive 排序查詢

排序是高階操作,故一定會用mapreduce作業來完成

–公升降序排序

查詢員工資訊:員工號 姓名 月薪 按照月薪排序

select empno,ename,sal from emp order

by sal; #公升序

select empno,ename,sal from emp order

by sal desc; #降序

–order by 後面跟:列,表示式,別名,序號

#表示式

select empno,ename,sal,sal*2

from emp order

by sal*12;

#別名select empno,ename,sal,sal*2 annsal from emp order

by annsal;

#序號select empno,ename,sal,sal*2 annsal from emp order

by4;

注:empno為第一列,序號為1,故類推序號為4的是 annsal 第4列

hive中要設定引數,將序號排序設定改為true才可以用。

下面引數預設值是false,在orderby查詢語句中是不能使用序號查詢的

hive> set hive.groupby.orderby.position.alias=true;

–空值查詢

null排序:公升序預設是排在最前面

用降序排在最後面

按照獎金排序

select empno,ename,sal,comm from emp;

hive的資料查詢

hive的資料查詢 查詢語法 select all distinct select expr,select expr,from table reference where where condition group by col list cluster by col list distribute...

Hive之資料查詢

發布於 2013 年 10 月 11 日 由 aaron 發布於 hive 一,排序和聚合 對於排序有兩種方式,一種是order by 一種是sort by order by 會對所有的資料進行排序,所以最後會只有乙個reducer來處理,如果資料量非常大,效率會非常差勁 sort by是部分排序,...

Hive 05 資料查詢

select from table name select sid,sname from table name select sid sname sal sal 12from table name select sid sname sal comm,sal 12 nvl comm,0 from ta...