hive的动态分区
动态分区
是在创建好的普通表的基础上,设定某个字段为分区字段,提高条件查询的效率!
步骤
先创建一个普通表
然后再创建一个动态分区表
开启动态分区的各种设置
设置好动态分区的字段,
数据自动按照设定的字段自己创建目录并分开导入数据了
2.1 动态分区的相关属性:
set hive.exec.dynamic.partition=true //使用动态分区
set hive.exec.dynamic.partition.mode=nonstrick;//无限制模式,如果模式是strict,则必须有一个静态分区且放在最前面
set hive.exec.max.dynamic.partitions.pernode=10000;//每个节点生成动态分区的最大个数
set hive.exec.max.dynamic.partitions=100000;//生成动态分区的最大个数
set hive.exec.max.created.files=150000;//一个任务最多可以创建的文件数目
set dfs.datanode.max.xcievers=8192;//限定一次最多打开的文件数
set hive.merge.mapfiles=true; //map端的结果进行合并
set mapred.reduce.tasks =20000; //设置reduce task个数
数据
xiaoming math 98
xiaohong math 95
xiaoming math 98
xiaokong math 95
xiaoming math 98
xiaokang math 96
创建一张普通表并导入数据
create table if not exists day_part2(
name string,
course string,
grade int
)
row format delimited fields terminated by ' ';
load data local inpath '/root/student.txt' into table day_part2;
然后再创建分区表
create table dy(
name string,
course string,
grade int
)partitioned by (grades int)
row format delimited fields terminated by ' ';
使用动态分区
set hive.exec.dynamic.partition=true;
开启无限模式
set hive.exec.dynamic.partition.mode=nonstrick;
导入数据的时候很重要哦!!
加载数据,注意select的时候要多一个字段,这个字段对应的就是分区字段!(括号内的分区字段要对应建表时候的分区字段)
insert into table dy partition (grades)
select name,course,grade,grade from day_part2;
最终就会根据这个字段数据的分区创建自己的目录