基於Hadoop的數據倉庫工具Hive(附超實用示例)

Hive功能

Hive是基於Hadoop構建的一套數據倉庫分析系統,它提供了豐富的SQL查詢方式來分析存儲在Hadoop分佈式文件系統中的數據:能夠將結構化的數據文件映射爲一張數據庫表,並提供完整的SQL查詢功能;能夠將SQL語句轉換爲MapReduce任務運行,經過本身的SQL查詢分析須要的內容,這套SQL簡稱Hive SQL,使不熟悉mapreduce的用戶能夠很方便地利用SQL語言查詢、彙總和分析數據。而mapreduce開發人員能夠把本身寫的mapper和reducer做爲插件來支持Hive作更復雜的數據分析。它與關係型數據庫的SQL略有不一樣,但支持了絕大多數的語句如DDL、DML以及常見的聚合函數、鏈接查詢、條件查詢。它還提供了一系列的1:具進行數據提取轉化加載,用來存儲、查詢和分析存儲在Hadoop中的大規模數據集,並支持UDF(User-Defined Function)、UDAF(User-Defnes AggregateFunction)和UDTF(User-Defined Table-Generating Function),也能夠實現對map和reduce函數的定製,爲數據操做提供了良好的伸縮性和可擴展性。算法

Hive不適合用於聯機(online)上事務處理,也不提供實時查詢功能。它最適合應用在基於大量不可變數據的批處理做業。Hive的特色包括:可伸縮(在Hadoop的集羣上動態添加設備)、可擴展、容錯、輸入格式的鬆散耦合。sql

內部表

Hive的內部表與數據庫中的Table在概念上是相似。每個Table在Hive中都有一個相應的目錄存儲數據。刪除表時,元數據與數據都會被刪除。數據庫

內部表示例:架構

建立數據文件:test_inner_table.txtapp

建立表:create table test_inner_table (key string)分佈式

加載數據:LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table函數

查看數據:select from test_inner_table;  select count() from test_inner_tableoop

刪除表:drop table test_inner_table性能

外部表

外部表指向已經在HDFS中存在的數據,能夠建立Partition。外部表加載數據和建立表同時完成(CREATE EXTERNAL TABLE ……LOCATION),實際數據是存儲在LOCATION後面指定的 HDFS 路徑中,並不會移動到數據倉庫目錄中。當刪除一個External Table時,僅刪除該連接。大數據

外部表示例:

建立數據文件:test_external_table.txt

建立表:create external table test_external_table (key string)

加載數據:LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table

查看數據:select from test_external_table;  •select count() from test_external_table

刪除表:drop table test_external_table

分區

Partition對應於數據庫中的Partition列的密集索引。在Hive中,表中的一個Partition對應於表下的一個目錄,全部的Partition的數據都存儲在對應的目錄中。

分區表示例:

建立數據文件:test_partition_table.txt

建立表:create table test_partition_table (key string) partitioned by (dt string)

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

查看數據:select from test_partition_table;  select count() from test_partition_table

刪除表:drop table test_partition_table

Buckets是將表的指定列經過Hash算法進一步分解成不一樣的文件存儲。它對指定列計算hash,根據hash值切分數據,目的是爲了並行,每個Bucket對應一個文件。當須要並行執行Map任務時,桶是不錯的選擇。

桶的示例:

建立數據文件:test_bucket_table.txt

建立表:create table test_bucket_table (key string) clustered by (key) into 20 buckets

加載數據:LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table

查看數據:select * from test_bucket_table;  set hive.enforce.bucketing = true;

視圖

視圖與傳統數據庫的視圖相似。視圖是隻讀的,它基於的基本表,若是改變,數據增長不會影響視圖的呈現;若是刪除,會出現問題。若是不指定視圖的列,會根據select語句後的生成。

示例:create view test_view as select * from test

傾斜表

對大數據系統來說,數據量大並不可怕,可怕的是數據傾斜。

數據傾斜,是並行處理的數據集中,某一部分的數據顯著多於其它部分,從而使得該部分的處理速度成爲整個數據集的瓶頸。

在Spark中,同一個Stage的不一樣Partition能夠並行處理,而具備依賴關係的不一樣Stage之間是串行處理的。換句話說,一個Stage所耗費的時間,主要由最慢的那個Task決定。因爲同一個Stage內的全部Task執行相同的計算,在排除不一樣計算節點計算能力差別的前提下,不一樣Task之間耗時的差別主要由該Task所處理的數據量決定。

傾斜表是一種特殊類型的表,其中常常出現的值(重誤差)被分割成單獨的文件,其他的值將轉到其餘文件。經過指定偏斜值,Hive會自動將它們分解爲單獨的文件,並在查詢期間能夠跳過(或包含)整個文件,從而提升性能。

建立表語法:create table <T> (schema) skewed by (keys) on (values) [STORED as DIRECTORIES];

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

存儲過程

存儲過程是在數據庫系統中爲了完成特定功能的SQL 語句集,通過第一次編譯後再次調用不須要再次編譯,用戶經過指定存儲過程的名字並給出參數(若是該存儲過程帶有參數)來執行它。

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

執行存儲過程

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客戶端提供了一種經過網頁的方式訪問Hive所提供的服務。這個接口對應Hive的HWI組件(Hive Web Interface),生產環境可用Hue組件代替,下圖爲Hue界面。


關於慧都數倉建模大師

慧都數倉建模大師可以快速、高效地幫助客戶搭建數據倉庫供企業決策分析之用。知足數據需求效率、數據質量、擴展性、面向主題等特色。

跨行業數據挖掘流程

基於企業的業務目標,進行數據理解、數據準備、數據建模,最後進行評價和部署,真正實現數據驅動業務決策。

相關文章
相關標籤/搜索