1分鐘了解基于Hadoop的數(shù)據(jù)倉庫工具Hive(附超實用示例)

Hive功能

Hive是基于Hadoop構建的一套數(shù)據(jù)倉庫分析系統(tǒng)猿诸,它提供了豐富的SQL查詢方式來分析存儲在Hadoop分布式文件系統(tǒng)中的數(shù)據(jù):可以將結構化的數(shù)據(jù)文件映射為一張數(shù)據(jù)庫表宪赶,并提供完整的SQL查詢功能叙赚;可以將SQL語句轉換為MapReduce任務運行肠套,通過自己的SQL查詢分析需要的內(nèi)容,這套SQL簡稱Hive SQL,使不熟悉mapreduce的用戶可以很方便地利用SQL語言查詢忿偷、匯總和分析數(shù)據(jù)。而mapreduce開發(fā)人員可以把自己寫的mapper和reducer作為插件來支持Hive做更復雜的數(shù)據(jù)分析臊泌。它與關系型數(shù)據(jù)庫的SQL略有不同鲤桥,但支持了絕大多數(shù)的語句如DDL、DML以及常見的聚合函數(shù)渠概、連接查詢茶凳、條件查詢。它還提供了一系列的1:具進行數(shù)據(jù)提取轉化加載高氮,用來存儲慧妄、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)集顷牌,并支持UDF(User-Defined Function)剪芍、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也可以實現(xiàn)對map和reduce函數(shù)的定制窟蓝,為數(shù)據(jù)操作提供了良好的伸縮性和可擴展性罪裹。

Hive不適合用于聯(lián)機(online)上事務處理饱普,也不提供實時查詢功能。它最適合應用在基于大量不可變數(shù)據(jù)的批處理作業(yè)状共。Hive的特點包括:可伸縮(在Hadoop的集群上動態(tài)添加設備)套耕、可擴展、容錯峡继、輸入格式的松散耦合冯袍。

內(nèi)部表

Hive的內(nèi)部表與數(shù)據(jù)庫中的Table在概念上是類似。每一個Table在Hive中都有一個相應的目錄存儲數(shù)據(jù)碾牌。刪除表時康愤,元數(shù)據(jù)與數(shù)據(jù)都會被刪除。

內(nèi)部表示例:

創(chuàng)建數(shù)據(jù)文件:test_inner_table.txt

創(chuàng)建表:create table test_inner_table (key string)

加載數(shù)據(jù):LOAD DATA LOCAL INPATH?‘filepath’?INTO TABLE test_inner_table

查看數(shù)據(jù):select * from test_inner_table; ?select count(*) from test_inner_table

刪除表:drop table test_inner_table

外部表

外部表指向已經(jīng)在HDFS中存在的數(shù)據(jù)舶吗,可以創(chuàng)建Partition征冷。外部表加載數(shù)據(jù)和創(chuàng)建表同時完成(CREATE EXTERNAL TABLE?……LOCATION),實際數(shù)據(jù)是存儲在LOCATION后面指定的?HDFS?路徑中誓琼,并不會移動到數(shù)據(jù)倉庫目錄中检激。當刪除一個External Table時,僅刪除該鏈接腹侣。

外部表示例:

創(chuàng)建數(shù)據(jù)文件:test_external_table.txt

創(chuàng)建表:create external table test_external_table (key string)

加載數(shù)據(jù):LOAD DATA INPATH?‘filepath’?INTO TABLE test_inner_table

查看數(shù)據(jù):select * from test_external_table;?select count(*) from test_external_table

刪除表:drop table test_external_table

分區(qū)

Partition對應于數(shù)據(jù)庫中的Partition列的密集索引叔收。在Hive中,表中的一個Partition對應于表下的一個目錄傲隶,所有的Partition的數(shù)據(jù)都存儲在對應的目錄中今穿。

分區(qū)表示例:

創(chuàng)建數(shù)據(jù)文件:test_partition_table.txt

創(chuàng)建表:create table test_partition_table (key string) partitioned by (dt string)

加載數(shù)據(jù):LOAD DATA INPATH?‘filepath’?INTO TABLE test_partition_table partition (dt=‘2006’)

查看數(shù)據(jù):select * from test_partition_table; ?select count(*) from test_partition_table

刪除表:drop table test_partition_table

Buckets是將表的指定列通過Hash算法進一步分解成不同的文件存儲。它對指定列計算hash伦籍,根據(jù)hash值切分數(shù)據(jù)蓝晒,目的是為了并行,每一個Bucket對應一個文件帖鸦。當需要并行執(zhí)行Map任務時芝薇,桶是不錯的選擇。

桶的示例:

創(chuàng)建數(shù)據(jù)文件:test_bucket_table.txt

創(chuàng)建表:create table test_bucket_table (key string) clustered by (key) into 20 buckets

加載數(shù)據(jù):LOAD DATA INPATH?‘filepath’?INTO TABLE test_bucket_table

查看數(shù)據(jù):select * from test_bucket_table; ?set hive.enforce.bucketing = true;

視圖

視圖與傳統(tǒng)數(shù)據(jù)庫的視圖類似作儿。視圖是只讀的洛二,它基于的基本表,如果改變攻锰,數(shù)據(jù)增加不會影響視圖的呈現(xiàn)晾嘶;如果刪除,會出現(xiàn)問題娶吞。如果不指定視圖的列垒迂,會根據(jù)select語句后的生成。

示例:create view test_view as select * from test

傾斜表

對大數(shù)據(jù)系統(tǒng)來講妒蛇,數(shù)據(jù)量大并不可怕机断,可怕的是數(shù)據(jù)傾斜楷拳。

數(shù)據(jù)傾斜,是并行處理的數(shù)據(jù)集中吏奸,某一部分的數(shù)據(jù)顯著多于其它部分欢揖,從而使得該部分的處理速度成為整個數(shù)據(jù)集的瓶頸。

在Spark中奋蔚,同一個Stage的不同Partition可以并行處理她混,而具有依賴關系的不同Stage之間是串行處理的。換句話說泊碑,一個Stage所耗費的時間产上,主要由最慢的那個Task決定。由于同一個Stage內(nèi)的所有Task執(zhí)行相同的計算蛾狗,在排除不同計算節(jié)點計算能力差異的前提下晋涣,不同Task之間耗時的差異主要由該Task所處理的數(shù)據(jù)量決定。

傾斜表是一種特殊類型的表沉桌,其中經(jīng)常出現(xiàn)的值(重偏差)被分割成單獨的文件谢鹊,其余的值將轉到其他文件。通過指定偏斜值留凭,Hive會自動將它們分解為單獨的文件佃扼,并在查詢期間可以跳過(或包含)整個文件,從而提高性能蔼夜。

創(chuàng)建表語法:create table (schema) skewed by (keys) on (values) [STORED as DIRECTORIES];

具體例子:?create table T (c1 string, c2 string) skewed by (c1) on ('x1')

存儲過程

存儲過程是在數(shù)據(jù)庫系統(tǒng)中為了完成特定功能的SQL?語句集兼耀,經(jīng)過第一次編譯后再次調(diào)用不需要再次編譯,用戶通過指定存儲過程的名字并給出參數(shù)(如果該存儲過程帶有參數(shù))來執(zhí)行它求冷。

CREATE PROCEDURE proc_test

BEGIN

Drop table order_base.O_ORDER_DETAIL;

create table order_base.O_ORDER_DETAIL (customernumber string, invoicenumber string, invoicedate string, ordernumber string, itemnumberid string, ordertypeen string, ordertypesc string, salesrepid string, warehouse string, lineamount string, linecostamount string, invoicequantity string, lineno string) clustered by (ordertypeen) into 2 buckets stored as orc ?TBLPROPERTIES ('transactional'='true');

TRUNCATE TABLE order_base.O_ORDER_DETAIL;

INSERT INTO order_base.O_ORDER_DETAIL select * from ORDER_DETAIL;

update order_base.O_ORDER_DETAIL set itemnumberid=replace(itemnumberid,'*','');

END;

CALL proc_test

執(zhí)行存儲過程

hplsql -f /home/hadoop/proc_test.sql

查詢結果

select * from order_base.O_ORDER_DETAIL where ordernumber=8800840;

客戶端接口

CLI:command line interface瘤运,命令行接口。

Thrift客戶端:?Hive架構的許多客戶端接口是建立在thrift客戶端之上匠题,包括JDBC和ODBC接口拯坟。

WEBGUI:Hive客戶端提供了一種通過網(wǎng)頁的方式訪問Hive所提供的服務。這個接口對應Hive的HWI組件(Hive Web Interface)韭山,生產(chǎn)環(huán)境可用Hue組件代替郁季,下圖為Hue界面。

關于慧都數(shù)倉建模大師

慧都數(shù)倉建模大師能夠快速钱磅、高效地幫助客戶搭建數(shù)據(jù)倉庫供企業(yè)決策分析之用梦裂。滿足數(shù)據(jù)需求效率、數(shù)據(jù)質量盖淡、擴展性年柠、面向主題等特點。

跨行業(yè)數(shù)據(jù)挖掘流程

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末禁舷,一起剝皮案震驚了整個濱河市彪杉,隨后出現(xiàn)的幾起案子毅往,更是在濱河造成了極大的恐慌牵咙,老刑警劉巖派近,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異洁桌,居然都是意外死亡渴丸,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門另凌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谱轨,“玉大人,你說我怎么就攤上這事吠谢⊥镣” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵工坊,是天一觀的道長献汗。 經(jīng)常有香客問我,道長王污,這世上最難降的妖魔是什么罢吃? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮昭齐,結果婚禮上尿招,老公的妹妹穿的比我還像新娘。我一直安慰自己阱驾,他們只是感情好就谜,可當我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著里覆,像睡著了一般吁伺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上租谈,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天篮奄,我揣著相機與錄音,去河邊找鬼割去。 笑死窟却,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的呻逆。 我是一名探鬼主播夸赫,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咖城!你這毒婦竟也來了茬腿?” 一聲冷哼從身側響起呼奢,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎切平,沒想到半個月后握础,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡悴品,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年禀综,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片苔严。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡定枷,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出届氢,到底是詐尸還是另有隱情欠窒,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布退子,位于F島的核電站岖妄,受9級特大地震影響,放射性物質發(fā)生泄漏絮供。R本人自食惡果不足惜衣吠,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望壤靶。 院中可真熱鬧缚俏,春花似錦、人聲如沸贮乳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽向拆。三九已至亚茬,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間浓恳,已是汗流浹背刹缝。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颈将,地道東北人梢夯。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像晴圾,于是被迫代替她去往敵國和親颂砸。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,446評論 2 348

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