Hive编程指南---动态分区插入

Hive如果需要创建非常多的分区,那么用户就需要写很多的SQL,Hive提供了一个动态分区功能,其可以基于查询参数推断需要创建的分区名称

INSERT OVERWRITE  TABEL employee

PARTITION(country,state)

SELECT .......se.cnty,se.st

FROM staged_employee se;

hive根据select语句中最后2列来确定分区字段country和state的值

用户也可以使用动态分区和静态分区


INSERT OVERWRITE INTO TABLE employee

PARTITION (country = 'US',state)

SELECT ......se.cnty ,se,st

FROM staged_employee se

WHERE se.cnty='US'

静态分区必须出现在动态分区之前


动态分区功能默认情况下是没有开启的。开启后,默认是以"严格"模式执行的,这这种模式下要求至少有一列分区字段是静态的。


设置如下参数开启动态分区:
hive.exec.dynamic.partition=true
默认值:false
描述:是否允许动态分区
hive.exec.dynamic.partition.mode=nonstrict
默认值:strict
描述:strict是避免全分区字段是动态的,必须有至少一个分区字段是指定有值的


设置如下参数配置动态分区的使用环境:
hive.exec.max.dynamic.partitions.pernode=100
默认值:100
描述:each mapper or reducer可以创建的最大动态分区数
hive.exec.max.dynamic.partitions=1000
默认值:1000
描述:一个DML操作可以创建的最大动态分区数
hive.exec.max.created.files=100000
默认值:100000
描述:一个DML操作可以创建的文件数

设置如下参数取消一些限制(HIVE 0.7后没有此限制):
hive.merge.mapfiles=false
默认值:true
描述:是否合并Map的输出文件
hive.merge.mapredfiles=false
默认值:false
描述:是否合并Reduce的输出文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值