Hive的动态分区以及动态分区引入的问题

本文探讨了Hive动态分区的概念,与静态分区的区别在于动态分区不需显式指定分区目录。在非严格模式下,通过示例展示了动态分区可能导致大量小文件的问题。针对此问题,提出了两种解决方案:1) 当最后阶段只有map任务时,可通过DISTRIBUTE BY将相同分区数据发送到同一reduce,减少文件数;2) 使用DISTRIBUTE BY rand()确保数据均匀分配到reduce,以平衡处理速度和文件数量。
摘要由CSDN通过智能技术生成

动态分区与静态分区区别就是动态分区是通过位置来对应分区值的,插入数据的时候不用显示的指定分区字段,即不指定分区目录,由系统自己选择。以emp表的数据为例:

hive (test)> create table emp_dynamic_partition(
           > empno int,
           > ename string,
           > job string,
           > mgr int,
           > hiredate string,
           > sal double,
           > comm double
           > )
           > PARTITIONED BY (deptno int)
           > ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
OK
Time taken: 0.049 seconds

insert中的partition字段和select中的最后一个字段一致,作为分区字段,并且将Hive的strict mode设置为nostrict
set hive.exec.dynamic.partition=true; 默认:false
set hive.exec.dynamic.partition.mode=nonstrict; 非严格模式

hive (test)> insert overwrite table emp_dynamic_partition partition(deptno)
           > select empno,ename,job,mgr,hiredate,sal,comm,deptno from ruozeda
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值