这篇文章主要介绍“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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。