动态分区与静态分区区别就是动态分区是通过位置来对应分区值的,插入数据的时候不用显示的指定分区字段,即不指定分区目录,由系统自己选择。以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

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

被折叠的 条评论
为什么被折叠?



