您好,登錄后才能下訂單哦!
這篇文章主要介紹“Hive分區分桶以及自定義函數的介紹”,在日常操作中,相信很多人在Hive分區分桶以及自定義函數的介紹問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hive分區分桶以及自定義函數的介紹”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
導入數據:
1、
load data local inpath '/root/tes.txt' into table test.usr;
將本地的數據導入到hive中
2、從hdfs集群導入數據
load data inpath 'hdfs://node01:9000/user/tes.txt' into table test.te;
LOAD DATA命令,可分為LOAD DATA LOCAL INPATH和LOAD DATA INPATH。兩者的區別在于LOCAL導入的是本地文件而不加LOCAL的導入的是HDFS文件---相當于直接將文件進行相應的上傳
3、insert into---內外部表,不適應于分區
4、
from table1insert into(overwrite) tables2select id ,name
分區表
Hive 分區partition(分成不同的文件目錄進行存儲)
1、靜態分區:
必須在表定義時指定對應的partition字段-----分區字段一定不能與表中字段重復
a、單分區建表語句:
create table day_table (id int, content string) partitioned by (dt int);上傳數據:load data local inpath '/root/tes.txt' into table test.usr partition (age=10);
單分區表,按天分區,在表結構中存在id,content,dt三列。
以dt為文件夾區分
粗細力度分區的時候要根據業務需求,提前進行相應的設定 年月日時分秒----為了減少每一個分區中的內容,提高計算效率
b、 雙分區建表語句:
create table hour(id int, content string) partitioned by (dt int, hour int);
雙分區表,按天和小時分區,在表結構中新增加了dt和hour兩列。
先以dt為文件夾,再以hour子文件夾區分
增加分區
alter table hour add partition(dt=10,hour=40);
alert table tablename add partiton(dt=20,hour=40)
也就是說添加分區的時候不能直接添加,而是需要將原來的分區也要包含其中,完成相應的排序
刪除分區
alter table tablename drop partition (sex='boy')
alert table tablename drop partiton(dt=20,hour=40)
注:刪除分區的時候,會將所有存在的分區都刪除
2、動態分區:
修改權限的方式:
1、conf/hive-site.xml
2、在hive內部使用set進行相應的設置
3、hive啟動的時候設置 hive --conf hive.exec.dynamic.partiton=true
修改權限的方法
1、修改權限
set hive.exec.dynamic.partiton=true //開啟動態分區
2、修改默認狀態
set hive.exec.dynamic.partiton.mode=nostrict //默認strict。至少有一個靜態分區
創建分區表:
create table psn22( id int, name string, likes array<String>, address map<string ,string> ) partitioned by (age int ,sex string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ’,’ COLLECTION ITEMS TERMINATED BY ‘,’ MAP KEYS TERMINATED BY ‘:’ LINES TERMINATED BY ‘\t’
寫入數據
from psn21 //已經存在的表格并且要有數據insert overwrite table pas22 partiton (age,sex)select * distribute by age,sex
分桶表:
測試數據
1,tom,11
開啟分桶
set hive.enforce.bucketing=true
創建桶
create table psnbucket1 (id int,name string,age int)clustered by (age) into 4 bucketsrow format delimited fields terminated by ','
加載數據
insert into table psnbucket select id,name,age from psn31
抽樣
select * from bucket_table tablesample(bucket 1 out of 4 by colimes)
自定義函數
UDF:一對一
1、繼承UDF
2、重寫evaluate
(實現傳入的參數,并且封裝了很多的方法)
public class AddPrefix extends UDF {
/**
* 這里我們實現將任一輸入添加自定義前綴信息
*/
public String evaluate(String str) {
return "HIVE UDF Prefix:"+ str;
}
}
UDAF:多對一
UDTF:一對多
1、創建udf自定義函數
2、達成jar包并上傳到linux集群
3、將集群中的jar包上傳到hive中:add jar /opt/software/jars/UDF.jar;
4、創建屬于我自己的函數
create temporary function bws as "com.hpe.TestUdf.TestUdf";
5、使用函數執行
但是在創建自定義函數的時候,一般都是創建的臨時函數,推出就木有了,那怎么創建永久函數呢?
注冊永久hive自定義函數
add jar的方式只是導入臨時的jar文件,所以不能創建永久的自定義函數,想要添加永久的自定義函數需要在配置文件中對jar的引入進行修改
在hive-site.xml文件中添加
<property> <name>hive.aux.jars.path</name> <value>file:///opt/module/hive/lib/app_logs_hive.jar</value> </property>
注意:value中的值為你的udf.jar上傳到linux的指定路徑下,若是多個jar包,以,(逗號)進行分割
到此,關于“Hive分區分桶以及自定義函數的介紹”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。