hadoop入門系列--hive基礎(chǔ)

傳送門
hadoop入門系列--hive基礎(chǔ)
hadoop入門系列--hive的三種集合數(shù)據(jù)類型array、map身弊、struct以及自定義分隔符示例
hadoop入門系列--hive中array(或map集合類型)的行轉(zhuǎn)多列LATERAL VIEW explode用法
傳送門

一更扁、概念理解

  • 不是數(shù)據(jù)庫,更像是adoop的一個工具或者接口。是一個構(gòu)建與Hadoop頂層的數(shù)據(jù)倉庫工具(數(shù)據(jù)倉庫是把所有數(shù)據(jù)都存儲伐割,都聯(lián)系起來诫咱◇舷叮可以存儲所有歷史數(shù)據(jù))
  • 本身不存儲和處理數(shù)據(jù)。依賴分布式文件系統(tǒng)HDFS存儲數(shù)據(jù)坎缭,依賴分布式并行計算模型MapReduce處理數(shù)據(jù)
  • 定義了簡單的類似SQL的查詢語言---HiveQL
  • 用戶可以通過編寫HiveQL語句運(yùn)行MapReduce任務(wù)

二竟痰、在hive數(shù)據(jù)庫中創(chuàng)建表

下面是創(chuàng)建表名為employee,兩個字段分別為id掏呼、name(類型分別為int坏快、String)

hive> create table if not exists employee (id int , name String)
ROW FORMAT DELIMITED    //行格式分隔
FIELDS TERMINATED BY '\t'    //以'\t'結(jié)尾的字段
LINES TERMINATED BY '\n'    //以'\n'結(jié)尾的行
STORED AS TEXTFILE;    //存儲為文本文件;

如果創(chuàng)建表成功,能看到以下回應(yīng):
OK
Time taken: 5.905 seconds
hive>

查看表結(jié)構(gòu)
desc student;

快速查看表的行數(shù)(利用EXPLAIN命令憎夷,通過查看查詢的執(zhí)行計劃中的TableScan操作中的Statistics得知數(shù)據(jù)量 )
explain select * from student;

刪除表
drop table student;

三莽鸿、把數(shù)據(jù)導(dǎo)入表中

1)從本地文件系統(tǒng)中導(dǎo)入數(shù)據(jù)到Hive表

hive> load data local inpath 'jobs.txt' into table employee;

需要注意的是:
和我們熟悉的關(guān)系型數(shù)據(jù)庫不一樣,Hive現(xiàn)在還不支持在insert語句里面直接給出一組記錄的文字形式拾给,也就是說祥得,Hive并不支持INSERT INTO …. VALUES形式的語句。


2)HDFS上導(dǎo)入數(shù)據(jù)到Hive表

方法原理:
從本地文件系統(tǒng)中將數(shù)據(jù)導(dǎo)入到Hive表的過程中蒋得,其實是先將數(shù)據(jù)臨時復(fù)制到HDFS的一個目錄下(典型的情況是復(fù)制到上傳用戶的HDFS home目錄下,比如/home/wyp/)级及,然后再將數(shù)據(jù)從那個臨時目錄下移動(注意,這里說的是移動额衙,不是復(fù)制R埂)到對應(yīng)的Hive表的數(shù)據(jù)目錄里面。既然如此窍侧,那么Hive肯定支持將數(shù)據(jù)直接從HDFS上的一個目錄移動到相應(yīng)Hive表的數(shù)據(jù)目錄下县踢,假設(shè)有下面這個文件/home/wyp/jobs.txt,具體的操作如下:

hive> load data inpath '/home/wyp/jobs.txt' into table employee;

hive> select * from employee;

從上面的執(zhí)行結(jié)果我們可以看到伟件,數(shù)據(jù)的確導(dǎo)入到wyp表中了硼啤!請注意load data inpath ‘/home/wyp/employee.txt’ into table employee;里面是沒有l(wèi)ocal這個單詞的,這個是和方法1的區(qū)別锋爪。


3)從別的表中查詢出相應(yīng)的數(shù)據(jù)并導(dǎo)入到Hive表中

#wyp表
hive> create table test (id int , name String,age init,tel String)
ROW FORMAT DELIMITED    //行格式分隔
FIELDS TERMINATED BY '\t'    //以'\t'結(jié)尾的字段
LINES TERMINATED BY '\n'    //以'\n'結(jié)尾的行
STORED AS TEXTFILE;    //存儲為文本文件;

#假設(shè)Hive中有test表丙曙,其建表語句如下所示:
hive> create table test (id int , name String,tel String)
partitioned by
(age int)
ROW FORMAT DELIMITED    //行格式分隔
FIELDS TERMINATED BY '\t'    //以'\t'結(jié)尾的字段
LINES TERMINATED BY '\n'    //以'\n'結(jié)尾的行
STORED AS TEXTFILE;    //存儲為文本文件;


大體和wyp表的建表語句類似,只不過test表里面用age作為了分區(qū)字段其骄。對于分區(qū)亏镰,這里在做解釋一下:

分區(qū):在Hive中,表的每一個分區(qū)對應(yīng)表下的相應(yīng)目錄拯爽,所有分區(qū)的數(shù)據(jù)都是存儲在對應(yīng)的目錄中索抓。比如wyp表有dt和city兩個分區(qū),則對應(yīng)dt=20131218,city=BJ對應(yīng)表的目錄為/user/hive/warehouse/dt=20131218/city=BJ,所有屬于這個分區(qū)的數(shù)據(jù)都存放在這個目錄中逼肯。

//下面語句就是將wyp表中的查詢結(jié)果并插入到test表中:
hive> insert into table test
    > partition (age='25')
    > select id, name
    > from wyp;

hive> select * from test;

//打印結(jié)果
4    wyp4   25
1    wyp    25
2    test   25
3    zs     25


  • 這里做一下說明:
    我們知道我們傳統(tǒng)數(shù)據(jù)塊的形式insert into table values(字段1耸黑,字段2),這種形式hive是不支持的篮幢。
  • 通過上面的輸出大刊,我們可以看到從wyp表中查詢出來的東西已經(jīng)成功插入到test表中去了!如果目標(biāo)表(test)中不存在分區(qū)字段三椿,可以去掉partition (age=’25′)語句缺菌。

通過上面的輸出,我們可以看到從wyp表中查詢出來的東西已經(jīng)成功插入到test表中去了搜锰!如果目標(biāo)表(test)中不存在分區(qū)字段伴郁,可以去掉partition (age=’25′)語句。當(dāng)然蛋叼,我們也可以在select語句里面通過使用分區(qū)值來動態(tài)指明分區(qū):

hive> set hive.exec.dynamic.partition.mode=nonstrict;

hive> insert into table test

> partition (age)

> select id, name,

> tel, age

> from wyp;

#####################################################################

這里輸出了一堆Mapreduce任務(wù)信息焊傅,這里省略

#####################################################################

Total MapReduce CPU Time Spent: 1 seconds 510 msec

OK

Time taken: 17.712 seconds


hive> select * from test;

OK

5 wyp1 131212121212 23

6 wyp2 134535353535 24

7 wyp3 132453535353 25

1 wyp 13188888888888 25

8 wyp4 154243434355 26

2 test 13888888888888 30

3 zs 899314121 34

Time taken: 0.399 seconds, Fetched: 7 row(s)

  • 這種方法叫做動態(tài)分區(qū)插入,但是Hive中默認(rèn)是關(guān)閉的狈涮,所以在使用前需要先把hive.exec.dynamic.partition.mode設(shè)置為nonstrict狐胎。當(dāng)然,Hive也支持insert overwrite方式來插入數(shù)據(jù)薯嗤,從字面我們就可以看出顽爹,overwrite是覆蓋的意思纤泵,是的骆姐,執(zhí)行完這條語句的時候,相應(yīng)數(shù)據(jù)目錄下的數(shù)據(jù)將會被覆蓋捏题!而insert into則不會玻褪,注意兩者之間的區(qū)別。例子如下:
hive> insert overwrite table test

> PARTITION (age)

> select id, name, tel, age

> from wyp;

  • 更可喜的是公荧,Hive還支持多表插入带射,什么意思呢?在Hive中循狰,我們可以把insert語句倒過來窟社,把from放在最前面,它的執(zhí)行效果和放在后面是一樣的绪钥,如下:
  • 可以在同一個查詢中使用多個insert子句灿里,這樣的好處是我們只需要掃描一遍源表就可以生成多個不相交的輸出。這個很酷吧程腹!
hive> show create table test3;

OK

CREATE TABLE test3(

id int,

name string)

Time taken: 0.277 seconds, Fetched: 18 row(s)



hive> from wyp

> insert into table test

> partition(age)

> select id, name, tel, age

> insert into table test3

> select id, name

> where age>25;



hive> select * from test3;

OK

8 wyp4

2 test

3 zs

Time taken: 4.308 seconds, Fetched: 3 row(s)


4)在創(chuàng)建表的時候通過從別的表中查詢出相應(yīng)的記錄并插入到所創(chuàng)建的表中

  • 在實際情況中匣吊,表的輸出結(jié)果可能太多,不適于顯示在控制臺上,這時候色鸳,將Hive的查詢輸出結(jié)果直接存在一個新的表中是非常方便的社痛,我們稱這種情況為CTAS(create table .. as select)如下:
hive> create table test4

> as

> select id, name, tel

> from wyp;



hive> select * from test4;

OK

5 wyp1 131212121212

6 wyp2 134535353535

7 wyp3 132453535353

8 wyp4 154243434355

1 wyp 13188888888888

2 test 13888888888888

3 zs 899314121

Time taken: 0.089 seconds, Fetched: 7 row(s

數(shù)據(jù)就插入到test4表中去了,CTAS操作是原子的命雀,因此如果select查詢由于某種原因而失敗蒜哀,新表是不會創(chuàng)建的!


4)練習(xí):請基于Job職位表數(shù)據(jù)吏砂,在HIVE中創(chuàng)建一個job表凡怎,然后將job數(shù)據(jù)加載到該表,并可以做查詢使用赊抖。

image.png
image.png

注:這里把數(shù)據(jù)導(dǎo)入hive的employee表统倒,命令可參考上面的本地導(dǎo)入hdfs導(dǎo)入兩種方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市氛雪,隨后出現(xiàn)的幾起案子房匆,更是在濱河造成了極大的恐慌,老刑警劉巖报亩,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浴鸿,死亡現(xiàn)場離奇詭異,居然都是意外死亡弦追,警方通過查閱死者的電腦和手機(jī)岳链,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劲件,“玉大人掸哑,你說我怎么就攤上這事×阍叮” “怎么了苗分?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長牵辣。 經(jīng)常有香客問我摔癣,道長,這世上最難降的妖魔是什么纬向? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任择浊,我火速辦了婚禮,結(jié)果婚禮上逾条,老公的妹妹穿的比我還像新娘琢岩。我一直安慰自己,他們只是感情好膳帕,可當(dāng)我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布粘捎。 她就那樣靜靜地躺著薇缅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪攒磨。 梳的紋絲不亂的頭發(fā)上泳桦,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機(jī)與錄音娩缰,去河邊找鬼灸撰。 笑死,一個胖子當(dāng)著我的面吹牛拼坎,可吹牛的內(nèi)容都是我干的浮毯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泰鸡,長吁一口氣:“原來是場噩夢啊……” “哼债蓝!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起盛龄,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤饰迹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后余舶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體啊鸭,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年匿值,在試婚紗的時候發(fā)現(xiàn)自己被綠了赠制。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡挟憔,死狀恐怖钟些,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情曲楚,我是刑警寧澤厘唾,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布褥符,位于F島的核電站龙誊,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏喷楣。R本人自食惡果不足惜趟大,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望铣焊。 院中可真熱鬧逊朽,春花似錦、人聲如沸曲伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至岛蚤,卻和暖如春邑狸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背涤妒。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工单雾, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人她紫。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓硅堆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親贿讹。 傳聞我的和親對象是個殘疾皇子渐逃,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,611評論 2 353

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