【Hive】动态分区

本文介绍了如何在Hive中创建带有动态分区的表,以及如何设置相关参数以启用和优化动态分区操作。内容包括动态分区的开启、模式设置、限制参数调整等,并展示了动态分区插入数据的SQL语句示例,包括有无静态分区的情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 建表,包含2个分区

CREATE TABLE temp_exp20211226_shutao_generalAndZs(
src string,
dst string) 
PARTITIONED BY (dt string,type string )
row format delimited 
      fields terminated by "\t"
STORED AS orc;

2. 设置参数

--是否开启动态分区功能,默认false关闭。使用动态分区时候,该参数必须设置成true
SET hive.exec.dynamic.partition=true; 

--动态分区的模式,默认strict,表示必须指定至少一个分区为静态分区,nonstrict模式表示允许所有的分区字段都可以使用动态分区。一般需要设置为nonstrict
SET hive.exec.dynamic.partition.mode=nonstrict; 

--在每个执行MR的节点上,最大可以创建多少个动态分区。该参数需要根据实际的数据来设定。比如:源数据中包含了一年的数据,即dt字段有365个值,那么该参数就需要设置成大于365,如果使用默认值100,则会报错。
SET hive.exec.max.dynamic.partitions.pernode = 100;

--在所有执行MR的节点上,最大一共可以创建多少个动态分区。同上参数解释。
SET hive.exec.max.dynamic.partitions=100;
 
--整个MR Job中,最大可以创建多少个HDFS文件。一般默认值足够了,除非你的数据量非常大,需要创建的文件数大于100000,可根据实际情况加以调整。默认值:100000
SET hive.exec.max.created.files=100000;

--默认值:false。当有空分区生成时,是否抛出异常。一般不需要设置。
SET hive.error.on.empty.partition=false;

3. 如果有2个动态分区

INSERT overwrite TABLE temp_exp20211226_shutao_generalAndZs PARTITION (dt,type) 
select src,dst,dt,type
from ……

4. 如果有1个静态分区

INSERT overwrite TABLE temp_exp20211226_shutao_generalAndZs PARTITION (dt='20211130',type) --注意:静态分区键必须出现在动态分区键之前。
select src,dst,type
from ……

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值