hive使用教程(2)--數(shù)據(jù)導(dǎo)入導(dǎo)出吏奸、查詢與排序

一.向表中裝載數(shù)據(jù)(Load)

1.語(yǔ)法

hive> load data [local] inpath '/opt/module/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)];

(1)load data:表示加載數(shù)據(jù)

(2)local:表示從本地加載數(shù)據(jù)到hive表憨栽;否則從HDFS加載數(shù)據(jù)到hive表

(3)inpath:表示加載數(shù)據(jù)的路徑

(4)overwrite:表示覆蓋表中已有數(shù)據(jù)营罢,否則表示追加

(5)into table:表示加載到哪張表

(6)student:表示具體的表

(7)partition:表示上傳到指定分區(qū)

2.實(shí)操案例

(0)創(chuàng)建一張表

hive (default)> create table student(id string, name string) row format delimited fields terminated by '\t';

(1)加載本地文件到hive

hive (default)> load data local inpath '/opt/module/datas/student.txt' into table default.student;

(2)加載HDFS文件到hive中

上傳文件到HDFS

hive (default)> dfs -put /opt/module/datas/student.txt /user/atguigu/hive;

加載HDFS上數(shù)據(jù)

hive (default)> load data inpath '/user/atguigu/hive/student.txt' into table default.student;

(3)加載數(shù)據(jù)覆蓋表中已有的數(shù)據(jù)

上傳文件到HDFS

hive (default)> dfs -put /opt/module/datas/student.txt /user/atguigu/hive;

加載數(shù)據(jù)覆蓋表中已有的數(shù)據(jù)

hive (default)> load data inpath '/user/atguigu/hive/student.txt' overwrite into table default.student;

通過查詢語(yǔ)句向表中插入數(shù)據(jù)(Insert)

1.創(chuàng)建一張分區(qū)表

hive (default)> create table student(id int, name string) partitioned by (month string) row format delimited fields terminated by '\t';

2.基本插入數(shù)據(jù)

hive (default)> insert into table student partition(month='201709') values(1,'wangwu');

3.基本模式插入(根據(jù)單張表查詢結(jié)果)

hive (default)> insert overwrite table student partition(month='201708')

 select id, name from student where month='201709';

4.多插入模式(根據(jù)多張表查詢結(jié)果)(有問題,只是查詢單表不同分區(qū)的)

hive (default)> from student

 insert overwrite table student partition(month='201707')

 select id, name where month='201709'

 insert overwrite table student partition(month='201706')

 select id, name where month='201709';
  1. 真的多表查詢插入至其他表
    將s3仲智,s4表的數(shù)據(jù)union all成新表new_table 然后插入到s5
from (select * from s3 union all select * from s4)  new_table
insert into table s5
select * ;

查詢語(yǔ)句中創(chuàng)建表并加載數(shù)據(jù)(As Select)

根據(jù)查詢結(jié)果創(chuàng)建表(查詢的結(jié)果會(huì)添加到新創(chuàng)建的表中)

create table if not exists student3

as select id, name from student;

創(chuàng)建表時(shí)通過Location指定加載數(shù)據(jù)路徑

1.創(chuàng)建表买乃,并指定在hdfs上的位置

hive (default)> create table if not exists student5(

 id int, name string

 )

 row format delimited fields terminated by '\t'

 location '/user/hive/warehouse/student5';

2.上傳數(shù)據(jù)到hdfs上

hive (default)> dfs -put /opt/module/datas/student.txt

/user/hive/warehouse/student5;

3.查詢數(shù)據(jù)

hive (default)> select * from student5;

Import數(shù)據(jù)到指定Hive表中

注意:先用export導(dǎo)出后,再將數(shù)據(jù)導(dǎo)入钓辆。

hive (default)> import table student2 partition(month='201709') from

 '/user/hive/warehouse/export/student';

二.數(shù)據(jù)導(dǎo)出

Insert導(dǎo)出

1.將查詢的結(jié)果導(dǎo)出到本地

hive (default)> insert overwrite local directory '/opt/module/datas/export/student'

 select * from student;

2.將查詢的結(jié)果格式化導(dǎo)出到本地

hive(default)>insert overwrite local directory '/opt/module/datas/export/student1'

 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from student;

3.將查詢的結(jié)果導(dǎo)出到HDFS上(沒有l(wèi)ocal)

hive (default)> insert overwrite directory '/user/atguigu/student2'

 ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'

 select * from student;

Hadoop命令導(dǎo)出到本地

hive (default)> dfs -get /user/hive/warehouse/student/month=201709/000000_0

/opt/module/datas/export/student3.txt;

Hive Shell 命令導(dǎo)出

基本語(yǔ)法:(hive -f/-e 執(zhí)行語(yǔ)句或者腳本 > file)

[atguigu@hadoop102 hive]$ bin/hive -e 'select * from default.student;' >

 /opt/module/datas/export/student4.txt;

Export導(dǎo)出到HDFS上

(defahiveult)> export table default.student to

 '/user/hive/warehouse/export/student';

Sqoop導(dǎo)出

后續(xù)..............................剪验。

清除表中數(shù)據(jù)(Truncate)

注意:Truncate只能刪除管理表,不能刪除外部表中數(shù)據(jù)

hive (default)> truncate table student;

三.查詢語(yǔ)句語(yǔ)法:

[WITH CommonTableExpression (, CommonTableExpression)*]    (Note: Only available

 starting with Hive 0.13.0)

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]

基本查詢(Select…From)

全表和特定列查詢

1.全表查詢

hive (default)> select * from emp;

2.選擇特定列查詢

hive (default)> select empno, ename from emp;

注意:

(1)SQL 語(yǔ)言大小寫不敏感前联。

(2)SQL 可以寫在一行或者多行

(3)關(guān)鍵字不能被縮寫也不能分行

(4)各子句一般要分行寫功戚。

(5)使用縮進(jìn)提高語(yǔ)句的可讀性。

列別名

1.重命名一個(gè)列

2.便于計(jì)算

3.緊跟列名似嗤,也可以在列名和別名之間加入關(guān)鍵字‘AS’

4.案例實(shí)操

查詢名稱和部門

hive (default)> select ename AS name, deptno dn from emp;

having與where不同點(diǎn)

select deptno,sum(sal) from emp where sal>1200 group by deptno having sum(sal)>8500 order by deptno;

#WHERE 語(yǔ)句在 GROUP BY 語(yǔ)句之前啸臀;SQL 會(huì)在分組之前計(jì)算 WHERE 語(yǔ)句。   
#HAVING 語(yǔ)句在 GROUP BY 語(yǔ)句之后烁落;SQL 會(huì)在分組之后計(jì)算 HAVING 語(yǔ)句乘粒。

(1)where針對(duì)表中的列發(fā)揮作用,查詢數(shù)據(jù)伤塌;having針對(duì)查詢結(jié)果中的列發(fā)揮作用灯萍,篩選數(shù)據(jù)。
(2)where后面不能寫分組函數(shù)每聪,而having后面可以使用分組函數(shù)旦棉。
(3)having只用于group by分組統(tǒng)計(jì)語(yǔ)句。

四.其他常用查詢函數(shù)

空字段賦值

  1. 函數(shù)說明
    NVL:給值為NULL的數(shù)據(jù)賦值药薯,它的格式是NVL( string1, replace_with)他爸。它的功能是如果string1為NULL,則NVL函數(shù)返回replace_with的值果善,否則返回string1的值诊笤,如果兩個(gè)參數(shù)都為NULL ,則返回NULL巾陕。
  2. 數(shù)據(jù)準(zhǔn)備:采用員工表
  3. 查詢:如果員工的comm為NULL讨跟,則用-1代替
hive (default)> select nvl(comm,-1) from emp;

OK
_c0
20.0
300.0
500.0
-1.0
1400.0
-1.0
-1.0
-1.0
-1.0
0.0
-1.0
-1.0
-1.0
-1.0
  1. 查詢:如果員工的comm為NULL纪他,則用領(lǐng)導(dǎo)id代替
hive (default)> select nvl(comm,mgr) from emp;
OK
_c0
20.0
300.0
500.0
7839.0
1400.0
7839.0
7839.0
7566.0
NULL
0.0
7788.0
7698.0
7566.0

5.CASE WHEN

  1. 數(shù)據(jù)準(zhǔn)備
    name dept_id sex
    悟空 A 男
    大海 A 男
    宋宋 B 男
    鳳姐 A 女
    婷姐 B 女
    婷婷 B 女

需求
求出不同部門男女各多少人。結(jié)果如下:

A     2       1
B     1       2

創(chuàng)建本地emp_sex.txt晾匠,導(dǎo)入數(shù)據(jù)

[atguigu@hadoop102 datas]$ vi emp_sex.txt
悟空  A   男
大海  A   男
宋宋  B   男
鳳姐  A   女
婷姐  B   女
婷婷  B   女

創(chuàng)建hive表并導(dǎo)入數(shù)據(jù)

create table emp_sex(
name string, 
dept_id string, 
sex string) 
row format delimited fields terminated by "\t";
load data local inpath '/opt/module/datas/emp_sex.txt' into table emp_sex;

按需求查詢數(shù)據(jù)

select 
  dept_id,
  sum(case sex when '男' then 1 else 0 end) male_count,
  sum(case sex when '女' then 1 else 0 end) female_count
from 
  emp_sex
group by
  dept_id;

五.排序

全局排序(Order By)

Order By:全局排序茶袒,一個(gè)Reducer

1.使用 ORDER BY 子句排序

ASC(ascend): 升序(默認(rèn))

DESC(descend): 降序

2.ORDER BY 子句在SELECT語(yǔ)句的結(jié)尾

3.案例實(shí)操

(1)查詢員工信息按工資升序排列

hive (default)> select * from emp order by sal;

(2)查詢員工信息按工資降序排列

hive (default)> select * from emp order by sal desc;

按照別名排序

按照員工薪水的2倍排序

hive (default)> select ename, sal*2 twosal from emp order by twosal;

多個(gè)列排序

按照部門和工資升序排序

hive (default)> select ename, deptno, sal from emp order by deptno, sal ;

每個(gè)MapReduce內(nèi)部排序(Sort By)

Sort By:每個(gè)Reducer內(nèi)部進(jìn)行排序,對(duì)全局結(jié)果集來說不是排序凉馆。

1.設(shè)置reduce個(gè)數(shù)

hive (default)> set mapreduce.job.reduces=3;

2.查看設(shè)置reduce個(gè)數(shù)

hive (default)> set mapreduce.job.reduces;

3.根據(jù)部門編號(hào)降序查看員工信息

hive (default)> select * from emp sort by empno desc;

4.將查詢結(jié)果導(dǎo)入到文件中(按照部門編號(hào)降序排序)

hive (default)> insert overwrite local directory '/opt/module/datas/sortby-result'

 select * from emp sort by deptno desc;

分區(qū)排序(Distribute By)

Distribute By:類似MR中partition薪寓,進(jìn)行分區(qū),結(jié)合sort by使用澜共。

注意向叉,Hive要求DISTRIBUTE BY語(yǔ)句要寫在SORT BY語(yǔ)句之前。

對(duì)于distribute by進(jìn)行測(cè)試嗦董,一定要分配多reduce進(jìn)行處理母谎,否則無法看到distribute by的效果。

案例實(shí)操:

  (1)先按照部門編號(hào)分區(qū)京革,再按照員工編號(hào)降序排序奇唤。

hive (default)> set mapreduce.job.reduces=3;

hive (default)> insert overwrite local directory '/opt/module/datas/distribute-result' select * from emp distribute by deptno sort by empno desc;

Cluster By

當(dāng)distribute by和sorts by字段相同時(shí),可以使用cluster by方式匹摇。

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

1)以下兩種寫法等價(jià)

hive (default)> select * from emp cluster by deptno;

hive (default)> select * from emp distribute by deptno sort by deptno;

注意:按照部門編號(hào)分區(qū)懈贺,不一定就是固定死的數(shù)值,可以是20號(hào)和30號(hào)部門分到一個(gè)分區(qū)里面去供搀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末隅居,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子葛虐,更是在濱河造成了極大的恐慌胎源,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿脐,死亡現(xiàn)場(chǎng)離奇詭異涕蚤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)的诵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門万栅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人西疤,你說我怎么就攤上這事烦粒。” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵扰她,是天一觀的道長(zhǎng)兽掰。 經(jīng)常有香客問我,道長(zhǎng)徒役,這世上最難降的妖魔是什么孽尽? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮忧勿,結(jié)果婚禮上杉女,老公的妹妹穿的比我還像新娘。我一直安慰自己鸳吸,他們只是感情好熏挎,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著层释,像睡著了一般婆瓜。 火紅的嫁衣襯著肌膚如雪快集。 梳的紋絲不亂的頭發(fā)上贡羔,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音个初,去河邊找鬼乖寒。 笑死院溺,一個(gè)胖子當(dāng)著我的面吹牛逐虚,可吹牛的內(nèi)容都是我干的叭爱。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼注盈,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼老客!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后损话,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡钝计,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年本鸣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了永高。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片命爬。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皆愉,死狀恐怖幕庐,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情歹苦,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布号杠,位于F島的核電站蚪腋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏姨蟋。R本人自食惡果不足惜屉凯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望芬探。 院中可真熱鬧神得,春花似錦厘惦、人聲如沸偷仿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)酝静。三九已至,卻和暖如春羡玛,著一層夾襖步出監(jiān)牢的瞬間别智,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工稼稿, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薄榛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓让歼,卻偏偏與公主長(zhǎng)得像敞恋,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子谋右,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345