代碼示例講解Hive分區分桶以及自定義函數

導入數據:node

一、linux

load data local inpath '/root/tes.txt' into table test.usr;微信

將本地的數據導入到hive中

二、從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文件---至關於直接將文件進行相應的上傳app

三、insert into---內外部表,不適應於分區函數

四、學習

from table1 insert into(overwrite) tables2 select id ,name測試

分區表lua

Hive 分區partition(分紅不一樣的文件目錄進行存儲)code

一、靜態分區:

必須在表定義時指定對應的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)

注:刪除分區的時候,會將全部存在的分區都刪除

二、動態分區:

修改權限的方式:

一、conf/hive-site.xml

二、在hive內部使用set進行相應的設置

三、hive啓動的時候設置 hive --conf hive.exec.dynamic.partiton=true

修改權限的方法

一、修改權限

set hive.exec.dynamic.partiton=true //開啓動態分區

二、修改默認狀態

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 buckets row 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:一對一

    一、繼承UDF

    二、重寫evaluate

    (實現傳入的參數,而且封裝了不少的方法)

public class AddPrefix extends UDF { /**

  • 這裏咱們實現將任一輸入添加自定義前綴信息 */ public String evaluate(String str) { return "HIVE UDF Prefix:"+ str; } }
UDAF:多對一

UDTF:一對多


一、建立udf自定義函數

二、達成jar包並上傳到linux集羣

三、將集羣中的jar包上傳到hive中:add jar /opt/software/jars/UDF.jar;

四、建立屬於我本身的函數

create temporary function bws as "com.hpe.TestUdf.TestUdf"; 五、使用函數執行

可是在建立自定義函數的時候,通常都是建立的臨時函數,推出就木有了,那怎麼建立永久函數呢?

註冊永久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包,以,(逗號)進行分割

知識你們一塊兒學習,關注Java架構師聯盟微信公衆號,在後臺回覆關鍵字能夠獲取更多棧長整理的Java架構技術乾貨

相關文章
相關標籤/搜索