Hive之动态分区

关系型数据库中,对分区表 Insert 数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive 中也提供了类似的机制,即动态分区(Dynamic Partition),只不过,使用 Hive 的动态分区,需要进行相应的配置。 

1、开启动态分区参数设置 

(1)开启动态分区功能(默认 true,开启) 

hive.exec.dynamic.partition=true 

(2)设置为非严格模式

动态分区的模式,默认 strict,表示必须指定至少一个分区为 静态分区,nonstrict 模式表示允许所有的分区字段都可以使用动态分区。

hive.exec.dynamic.partition.mode=nonstrict 

(3)在所有执行 MR 的节点上,最大一共可以创建多少个动态分区。 

hive.exec.max.dynamic.partitions=1000 

(4)在每个执行 MR 的节点上,最大可以创建多少个动态分区

该参数需要根据实际 的数据来设定。比如:源数据中包含了一年的数据,即 day 字段有 365 个值,那么该参数就 需要设置成大于 365,如果使用默认值 100,则会报错。

hive.exec.max.dynamic.partitions.pernode=100 

(5)整个 MR Job 中,最大可以创建多少个 HDFS 文件。 

hive.exec.max.created.files=100000 

(6)当有空分区生成时,是否抛出异常。一般不需要设置。 

hive.error.on.empty.partition=false 

2、案例

(1)创建分区表 

create table ori_partitioned(
id bigint,
time bigint,
uid string,
keyword string,
url_rank int,
click_num int,
click_url string
)
partitioned by (pkeyword string)
row format delimited fields terminated by '\t';

(2)设置动态分区 

set hive.exec.dynamic.partition = true;

set hive.exec.dynamic.partition.mode = nonstrict;

set hive.exec.max.dynamic.partitions = 1000;

set hive.exec.max.dynamic.partitions.pernode = 100;

set hive.exec.max.created.files = 100000;

set hive.error.on.empty.partition = false; 

导入数据:

insert overwrite table ori_partitioned partition (pkeyword
select id, time, uid, keyword, url_rank, click_num, click_url,
keyword as pkeyword
from ori;

注意:insert overwrite table ori_partitioned partition (pkeyword)  中的pkeyword必须叫pkeyword,否则报错。

(3)查看目标分区表的分区情况 

hive (test)>  show partitions ori_partitioned;
OK
partition
pkeyword=1
pkeyword=10
pkeyword=11
pkeyword=12
pkeyword=13
pkeyword=14
pkeyword=15
pkeyword=16
pkeyword=17
pkeyword=18
pkeyword=19
pkeyword=2
pkeyword=20
pkeyword=24
pkeyword=25
pkeyword=27
pkeyword=28
pkeyword=3
pkeyword=30
pkeyword=31
pkeyword=36
pkeyword=39
pkeyword=4
pkeyword=439889f58b9ef0a0a70eef792a87572e
pkeyword=5
pkeyword=50
pkeyword=6
pkeyword=7
pkeyword=8
pkeyword=9
pkeyword=__HIVE_DEFAULT_PARTITION__
pkeyword=http%3A78dsafwww.131du8.com%2Ftushu%2Fzws00n5yz.shtml
Time taken: 0.064 seconds, Fetched: 32 row(s)


 

 

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值