静态分区文章:Hive —— 静态分区表_月亮给我抄代码的博客-优快云博客_hive创建静态分区表
前言:不要把分区字段设置成中文!!!!!!
创建动态分区表(与静态分区一致):
create table table_name(id int, name string,age int)
partitioned by (sex string)
row format delimited fields terminated by '\t'; //行分隔符\t
在往动态分区表中添加数据时,需要先开启一些参数:
// 开启动态分区,默认含有一个静态分区。此参数hive 0.9.0版本开始默认就为true,以上版本可以不用设置
set hive.exec.dynamic.partition=true
// 设置为非严格模式,通俗来说就是不默认有一个静态分区,全程动态分区。
set hive.exec.dynamic.partition.mode=nonstrict
如果进行动态分区,这上面两项参数必须开启!
其余参数配置:
// 表示每个maper或reducer可以允许创建的最大动态分区个数,默认是100,超出则会报错。
set hive.exec.max.dynamic.partitions.pernode=100 (默认100)
// 最大动态分区个数,超出报错。
set hive.exec.max.dynamic.partitions =1000 (默认值)
// 全局可以创建的最大文件个数,超出报错。
set hive.exec.max.created.files =10000 (默认)
将查询数据添加到分区表:
insert into[overwrite] table table_name partition(sex)
select id,name,age,sex from table_name order by age;
注意!!!这里与静态分表有所不同,在动态分区表中,它是将 select 的最后一个字段作为分区字段, 进行映射,如果是多级动态分区,依次排列就好了,如下:
insert into[overwrite] table table_name partition(year,month,day)
select id,name,age,year,month,day from table_name;
添加分区,示例:
alter table table_name add if not exists partition(year='2020') partition(year='2021');
注意,同时添加多个分区时中间必须使用空格隔开
删除分区,示例:
(如果你设置了中文,你会发现删除不掉,只能去hdfs上删了。)
alter table table_name drop partition(year='2020'),partition(year='2021');
注意,同时删除多个分区时中间必须使用逗号隔开
快速删除多个分区,指定要删除的分区范围:
alter table table_name drop if exists partition(year>='2010',year<'2020');
查看分区表中的所有分区:
show partitions table_name;
查看分区表结构:
desc table_name;
总结,动态分区与静态分区大致上没啥区别,注意一下动态分区时的字段映射,其实动态分区就多了一个参数开启的步骤,但能进行自动分区的操作,看具体的场景进行运用吧。