1. 程式人生 > >HIVE的分割槽、hive關聯Hbase、UDF函式

HIVE的分割槽、hive關聯Hbase、UDF函式

Hive and HDFS

                                             原始資料

這裡寫圖片描述

//建立hive和Hdfs的外部關聯表

CREATE EXTERNAL TABLE people(id int,sex string,name string)
partitioned by (logdate string,hour string)
row format delimited fields terminated by ‘,’;

//追加資料

ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20160111,hour=00)
LOCATION ‘/user/yuhui/20160111/00’;
這裡寫圖片描述

Hive partition Query

分割槽背景

1)在Hive Select查詢中一般會掃描整個表內容,會消耗很多時間做沒必要的工作。有時候只需要掃描表中關心的一部分資料,因此建表時引入了partition概念。
2)分割槽表指的是在建立表時指定的partition的分割槽空間。
3)如果需要建立有分割槽的表,需要在create表的時候呼叫可選引數partitioned by

分割槽技術細節

1)一個表可以擁有一個或者多個分割槽,每個分割槽以資料夾的形式單獨存在表文件夾的目錄下。
2)表和列名不區分大小寫。
3)分割槽是以欄位的形式在表結構中存在,通過describe table命令可以檢視到欄位存在,但是該欄位不存放實際的資料內容,僅僅是分割槽的表示

ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20160111,hour=00) LOCATION ‘/user/yuhui/20160111/00’;

ALTER TABLE people ADD IF NOT EXISTS PARTITION(logdate=20160112,hour=00) LOCATION ‘/user/yuhui/20160112/00’;

這裡寫圖片描述

Hive 條件查詢和多表查詢

Hive的條件查詢和多表join查詢都和SQL查詢一樣,唯一不同的是hive將查詢轉為
MapReduce的job執行。

這裡寫圖片描述

Hive and Hbase

Hbase的建表
這裡寫圖片描述

Hbase的資料插入
這裡寫圖片描述

建立hive連線Hbase的外部表

CREATE EXTERNAL TABLE hive_join_hbase(
key string,
id string,
name string,
sex string
)
STORED BY ‘org.apache.hadoop.hive.hbase.HBaseStorageHandler’
WITH SERDEPROPERTIES
(“hbase.columns.mapping”=”:key,info:id,info:name,info:sex”)
TBLPROPERTIES(“hbase.table.name”=”bigdata”);

通過hive查詢資料

根據rowkey查詢
select * from hive_join_hbase where key=‘people1‘

根據某個欄位查詢
select * from hive_join_hbase where name =‘wangya‘

組合查詢
select * from hive_join_hbase where name = wangya ’ and sex=man’

Hive and UDF

編輯Java程式
import org.apache.hadoop.hive.ql.exec.UDF;
public class helloUDF extends UDF {
public String evaluate(String str) {
try {
return “HelloWorld ” + str;
} catch (Exception e) {
return null;
}
}
}

新增到hive的第三方jar hive>ADD JAR helloudf.jar;
自定義hive臨時函式名稱 hive>create temporary function helloworld as ‘com.hrj.hive.udf.helloUDF’;
使用UDF函式 hive> select helloworld(t.col1) from t limit 10;
刪除UDF函式 hive> drop temporary function helloworld;

Hive的第三方Jar包的路徑
Hive/conf/hive-env.sh
export HIVE_AUX_JARS_PATH=$HIVE_HOME/lib

Hive的相關命令

建立新表
hive> CREATE TABLE t_hive (a int, b int, c int) ROW FORMAT DELIMITED FIELDS TERMINATED BY ‘\t’;

匯入資料t_hive.txt到t_hive表
hive> LOAD DATA LOCAL INPATH ‘/home/cos/demo/t_hive.txt’ OVERWRITE INTO TABLE t_hive ;

正則匹配表名
hive>show tables ‘t‘;

增加一個欄位
hive> ALTER TABLE t_hive ADD COLUMNS (new_col String);

重命令表名
hive> ALTER TABLE t_hive RENAME TO t_hadoop;

從HDFS載入資料
hive> LOAD DATA INPATH ‘/user/hive/warehouse/t_hive/t_hive.txt’ OVERWRITE INTO TABLE t_hive2;

從其他表匯入資料
hive> INSERT OVERWRITE TABLE t_hive2 SELECT * FROM t_hive ;

建立表並從其他表匯入資料
hive> CREATE TABLE t_hive AS SELECT * FROM t_hive2 ;

僅複製表結構不導資料
hive> CREATE TABLE t_hive3 LIKE t_hive;

通過Hive匯出到本地檔案系統
hive> INSERT OVERWRITE LOCAL DIRECTORY ‘/tmp/t_hive’ SELECT * FROM t_hive;

Hive查詢HiveQL
from ( select b,c as c2 from t_hive) t select t.b, t.c2 limit 2;
select b,c from t_hive limit 2;