hive 操作

1从橘、Hive操作演示

1.1內(nèi)部表

1.1.1?創(chuàng)建表并加載數(shù)據(jù)

第一步啟動(dòng)HDFS锁摔、YARN和Hive绸贡,啟動(dòng)完畢后創(chuàng)建Hive數(shù)據(jù)庫(kù)

hive>create database hive;

hive>show databases;

hive>use hive;

第二步創(chuàng)建內(nèi)部表

由于Hive使用了類似SQL的語(yǔ)法寨腔,所以創(chuàng)建內(nèi)部表的語(yǔ)句相對(duì)SQL只增加了行和字段分隔符辛友。

hive>CREATE

TABLE tab2(DT STRING,WEBSESSION STRING,WORD STRING,S_SEQ INT,C_SEQ

INT,WEBSITE STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES

TERMINATED BY '\n' ;

第三步加載數(shù)據(jù)

數(shù)據(jù)文件可以從HDFS或者本地操作系統(tǒng)加載到表中斩例,如果加載HDFS文件使用LOAD DATA INPATH宠能,而加載本地操作系統(tǒng)文件使用LOAD DATA LOCAL INPATH命令。HIVE表保存的默認(rèn)路徑在${HIVE_HOME}/conf/hive-site.xml配置文件的hive.metastore.warehouse.dir屬性指定,當(dāng)創(chuàng)建表時(shí)會(huì)在hive.metastore.warehouse.dir指向的目錄下以表名創(chuàng)建一個(gè)文件夾很钓,在本演示中表默認(rèn)指向的是/user/hive/warehouse。

數(shù)據(jù)文件在本地操作系統(tǒng)將復(fù)制到表對(duì)應(yīng)的目錄中翅睛,而數(shù)據(jù)文件在HDFS中捅僵,數(shù)據(jù)文件將移動(dòng)到表對(duì)應(yīng)的目錄中,原來(lái)的路徑將不存在該文件掖看。

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/sogou/tab2.txt' INTO TABLE tab2;

在/user/hive/warehouse/hive.db/tab2目錄下匣距,可以看到tab2.txt數(shù)據(jù)文件:

1.1.2?查詢行數(shù)

可以用count關(guān)鍵字查詢tab2.txt數(shù)據(jù)行數(shù)诈铛,查詢時(shí)會(huì)啟動(dòng)MapReduce進(jìn)行計(jì)算,Map的個(gè)數(shù)一般和數(shù)據(jù)分片個(gè)數(shù)對(duì)應(yīng)墨礁,在本查詢中有2個(gè)Map任務(wù)(數(shù)據(jù)文件有2個(gè)Block)幢竹,1個(gè)Reduce任務(wù)。

hive>select count(*) from tab2;

1.1.3?包含laopo的數(shù)據(jù)

可以用like關(guān)鍵字進(jìn)行模糊查詢恩静,Map的個(gè)數(shù)一般和數(shù)據(jù)分片個(gè)數(shù)對(duì)應(yīng)焕毫。

hive>select count(*) from tab2 where WEBSITE like '%laopo%';

1.1.4?查詢結(jié)果排名第1,點(diǎn)擊次序排第2驶乾,其中URL包含google的數(shù)據(jù)

hive>select count(*) from tab2 where S_SEQ=1 and C_SEQ=2 and WEBSITE like '%google%';

1.2外部表

1.2.1?創(chuàng)建表關(guān)聯(lián)數(shù)據(jù)

第一步在HDFS創(chuàng)建外部表存放數(shù)據(jù)目錄

$hadoop fs -mkdir -p /class5/tab1

$hadoop fs -ls /class5

第二步在Hive創(chuàng)建外部表邑飒,指定表存放目錄

hive>CREATE

EXTERNAL TABLE tab1(DT STRING,WEBSESSION STRING,WORD STRING,S_SEQ

INT,C_SEQ INT,WEBSITE STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY

'\t' LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION

'/class5/tab1';

hive>show tables;

觀察一下創(chuàng)建表和外部表的區(qū)別,會(huì)發(fā)現(xiàn)創(chuàng)建外部表多了EXTERNAL關(guān)鍵字以及指定了表對(duì)應(yīng)存放文件夾LOCATION?‘/class5/tab1

【注】在刪除表的時(shí)候级乐,內(nèi)部表將刪除表的元數(shù)據(jù)和數(shù)據(jù)文件疙咸;而刪除外部表的時(shí)候,僅僅刪除外部表的元數(shù)據(jù)风科,不刪除數(shù)據(jù)文件

第三步加載數(shù)據(jù)文件到外部表對(duì)應(yīng)的目錄中

創(chuàng)建Hive外部表關(guān)聯(lián)數(shù)據(jù)文件有兩種方式撒轮,一種是把外部表數(shù)據(jù)位置直接關(guān)聯(lián)到數(shù)據(jù)文件所在目錄上,這種方式適合數(shù)據(jù)文件已經(jīng)在HDFS存在贼穆,另外一種方式是創(chuàng)建表時(shí)指定外部表數(shù)據(jù)目錄题山,隨后把數(shù)據(jù)加載到該目錄下。以下將以第二種方式進(jìn)行演示:

$hadoop fs -copyFromLocal /home/hadoop/upload/sogou/tab1.txt? /class5/tab1/

$hadoop fs -ls /class5/tab1

$hadoop fs -tail /class5/tab1/tab1.txt

1.2.2?查詢行數(shù)

hive>select count(*) from tab1;

1.2.3?顯示前10行

hive>select * from tab1?limit 10;

可以看出Hive會(huì)根據(jù)查詢不同任務(wù)決定是否生成Job故痊,獲取前10條并沒(méi)有生成Job顶瞳,而是得到數(shù)據(jù)后直接進(jìn)行顯示。

1.2.4?查詢結(jié)果排名第1愕秫,點(diǎn)擊次序排第2的數(shù)據(jù)

hive>select count(*) from tab1?where S_SEQ=1 and C_SEQ=2;

1.2.5?查詢次數(shù)排行榜

按照session號(hào)進(jìn)行歸組慨菱,并按照查詢次數(shù)進(jìn)行排序,最終顯示查詢次數(shù)最多的前10條戴甩。

hive>select WEBSESSION,count(WEBSESSION) as cw from tab1?group by WEBSESSION order by cw desc limit 10;

2符喝、交易數(shù)據(jù)演示

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

2.1.1?上傳數(shù)據(jù)

交易數(shù)據(jù)存放在該系列配套資源的/class5/saledata目錄下,在/home/hadoop/upload創(chuàng)建class5目錄用于存放本周測(cè)試數(shù)據(jù)

$cd /home/hadoop/upload

$mkdir class5

創(chuàng)建新文件夾后使用等恐,使用SSH Secure File Transfer工具上傳到/home/hadoop/upload/class5目錄下洲劣,如下圖所示:

2.1.2?在Hive創(chuàng)建數(shù)據(jù)庫(kù)和表

啟動(dòng)Hadoop集群,進(jìn)入Hive命令行操作界面课蔬,使用如下命令創(chuàng)建三張數(shù)據(jù)表:

ltbDate定義了日期的分類囱稽,將每天分別賦予所屬的月份、星期二跋、季度等屬性战惊,字段分別為日期、年月扎即、年吞获、月况凉、日、周幾各拷、第幾周刁绒、季度、旬烤黍、半月知市;

ltbStock定義了訂單表頭,字段分別為訂單號(hào)速蕊、交易位置嫂丙、交易日期;

ltbStockDetail文件定義了訂單明細(xì)规哲,該表和tbStock以交易號(hào)進(jìn)行關(guān)聯(lián)跟啤,字段分別為訂單號(hào)、行號(hào)唉锌、貨品隅肥、數(shù)量、金額:

hive>use hive;

hive>CREATE TABLE?tbDate(dateID

string,theyearmonth string,theyear string,themonth string,thedate

string,theweek string,theweeks

string,thequot string,thetenday string,thehalfmonth string) ROW FORMAT

DELIMITED FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

hive>CREATE TABLE?tbStock(ordernumber STRING,locationid string,dateID string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','

LINES TERMINATED BY '\n' ;

hive>CREATE TABLE?tbStockDetail(ordernumber STRING,rownum int,itemid string,qty int,price int ,amount int) ROW FORMAT DELIMITED

FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' ;

2.1.3?導(dǎo)入數(shù)據(jù)

從本地操作系統(tǒng)分別加載日期糊秆、交易信息和交易詳細(xì)信息表數(shù)據(jù)

hive>use hive;

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/class5/saledata/tbDate.txt' INTO TABLE tbDate;

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/class5/saledata/tbStock.txt' INTO TABLE tbStock;

hive>LOAD DATA LOCAL INPATH '/home/hadoop/upload/class5/saledata/tbStockDetail.txt' INTO TABLE tbStockDetail;

查看HDFS中相關(guān)SALEDATA數(shù)據(jù)庫(kù)中增加了三個(gè)文件夾武福,分別對(duì)應(yīng)三個(gè)表:

2.2計(jì)算所有訂單每年的總金額

2.2.1?算法分析

要計(jì)算所有訂單每年的總金額,首先需要獲取所有訂單的訂單號(hào)痘番、訂單日期和訂單金信息,然后把這些信息和日期表進(jìn)行關(guān)聯(lián)平痰,獲取年份信息汞舱,最后根據(jù)這四個(gè)列按年份歸組統(tǒng)計(jì)獲取所有訂單每年的總金額。

2.2.2?執(zhí)行HSQL語(yǔ)句

hive>use hive;

hive>select

c.theyear, sum(b.amount) from tbStock a,tbStockDetail b,tbDate c where

a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear

order by c.theyear;


2.3計(jì)算所有訂單每年最大金額訂單的銷售額

2.3.1?算法分析

該算法分為兩步:

1.按照日期和訂單號(hào)進(jìn)行歸組計(jì)算宗雇,獲取所有訂單每天的銷售數(shù)據(jù)昂芜;

2.把第一步獲取的數(shù)據(jù)和日期表進(jìn)行關(guān)聯(lián)獲取的年份信息,然后按照年份進(jìn)行歸組赔蒲,使用Max函數(shù)泌神,獲取所有訂單每年最大金額訂單的銷售額。

2.3.2?執(zhí)行HSQL語(yǔ)句

//所有訂單每年最大金額訂單的銷售額

//第一步:

hive>use hive;

hive>select

a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock

a,tbStockDetail b where a.ordernumber=b.ordernumber group by

a.dateid,a.ordernumber;

//第二步:

hive>select

c.theyear,max(d.sumofamount) from tbDate c,(select

a.dateid,a.ordernumber,sum(b.amount) as sumofamount from tbStock

a,tbStockDetail b where a.ordernumber=b.ordernumber group by

a.dateid,a.ordernumber)

d??where c.dateid=d.dateid group by c.theyear sort by c.theyear;

運(yùn)行過(guò)程中創(chuàng)建兩個(gè)Job舞虱,分別為job_1437659442092_0004和job_1437659442092_0005欢际,運(yùn)行過(guò)程如下:

在YARN的資源管理器界面中可以看到如下界面:

其中job_1437659442092_0005運(yùn)行的具體情況如下:

2.3.3?查看結(jié)果

整個(gè)計(jì)算過(guò)程使用了285秒,結(jié)果如下:

2.4計(jì)算其他金額

2.4.1?所有訂單中季度銷售額前10位

//所有訂單中季度銷售額前10位

hive>use hive;

hive>select

c.theyear,c.thequot,sum(b.amount) as sumofamount from tbStock

a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and

a.dateid=c.dateid group by c.theyear,c.thequot order by sumofamount

desc limit 10;

2008????1????5252819

2007????4????4613093

2007????1????4446088

2006????1????3916638

2008????2????3886470

2007????3????3870558

2007????2????3782235

2006????4????3691314

2005????1????3592007

2005????3????3304243

2.4.2?列出銷售金額在100000以上的單據(jù)

//列出銷售金額在100000以上的單據(jù)

hive>use hive;

hive>select

a.ordernumber,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b

where a.ordernumber=b.ordernumber group by a.ordernumber having

sumofamount>100000;

2.4.3?所有訂單中每年最暢銷貨品

//所有訂單中每年最暢銷貨品

第一步:

hive>use hive;

hive>select

c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock

a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and

a.dateid=c.dateid group by c.theyear,b.itemid;

第二步:

hive>select

d.theyear,max(d.sumofamount) as maxofamount from (select

c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock

a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and

a.dateid=c.dateid

group by c.theyear,b.itemid) d group by d.theyear ;

第三步:

hive>select distinct??e.theyear,e.itemid,f.maxofamount from (select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,b.itemid) e , (select d.theyear,max(d.sumofamount) as maxofamount from (select c.theyear,b.itemid,sum(b.amount) as sumofamount from tbStock a,tbStockDetail b,tbDate c where a.ordernumber=b.ordernumber and a.dateid=c.dateid group by c.theyear,b.itemid) d group by d.theyear) f where e.theyear=f.theyear and e.sumofamount=f.maxofamount order by e.theyear;

2004????JY424420810101???53374

2005????24124118880102???56569

2006????JY425468460101???113684

2007????JY425468460101???70226

2008????E2628204040101???97981

2009????YL327439080102???30029

2010????SQ429425090101??4494

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末矾兜,一起剝皮案震驚了整個(gè)濱河市损趋,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌椅寺,老刑警劉巖浑槽,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蒋失,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡桐玻,警方通過(guò)查閱死者的電腦和手機(jī)篙挽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)镊靴,“玉大人嫉髓,你說(shuō)我怎么就攤上這事∫叵校” “怎么了算行?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)苫耸。 經(jīng)常有香客問(wèn)我州邢,道長(zhǎng),這世上最難降的妖魔是什么褪子? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任量淌,我火速辦了婚禮,結(jié)果婚禮上嫌褪,老公的妹妹穿的比我還像新娘呀枢。我一直安慰自己,他們只是感情好笼痛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布裙秋。 她就那樣靜靜地躺著,像睡著了一般缨伊。 火紅的嫁衣襯著肌膚如雪摘刑。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天刻坊,我揣著相機(jī)與錄音枷恕,去河邊找鬼。 笑死谭胚,一個(gè)胖子當(dāng)著我的面吹牛徐块,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播灾而,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胡控,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了绰疤?” 一聲冷哼從身側(cè)響起铜犬,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后癣猾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體敛劝,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年纷宇,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了夸盟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡像捶,死狀恐怖上陕,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情拓春,我是刑警寧澤释簿,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站硼莽,受9級(jí)特大地震影響庶溶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜懂鸵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一偏螺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧匆光,春花似錦套像、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至采幌,卻和暖如春劲够,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背休傍。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蹲姐,地道東北人磨取。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像柴墩,于是被迫代替她去往敵國(guó)和親忙厌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

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