Hive —— 动态分区表

 静态分区文章: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;

 

总结,动态分区与静态分区大致上没啥区别,注意一下动态分区时的字段映射,其实动态分区就多了一个参数开启的步骤,但能进行自动分区的操作,看具体的场景进行运用吧。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月亮给我抄代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值