hive中的动态分区和静态分区
来源:互联网 发布:2016淘宝历史订单没了 编辑:程序博客网 时间:2024/06/10 07:36
HIVE默认是静态分区。但是有时候可能需要动态创建不同的分区,比如商品信息,我想根据它是否在线分成两个分区,这样后续如果要取在线商品,就只需要从在线的分区获取即可。动态分区可以通过下面的设置来打开:
set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
然后代码里就可以这么写:
insert overwrite table tbl_name partition(pt, if_online)
select field1, field2, ..., pt, if_online
from tbl
where xxx;
注意输入字段的最后面必须是动态分区字段。
看一下与静态分区写法的区别:
insert overwrite table tbl_name partition(pt=20121023, if_online=1)
select field1, field2, ..., fieldn
from tbl
where xxx;
动态分区与静态分区还有一个细微的差别是,静态分区一 定会创建分区,不管SELECT语句的结果有没有数据。而动态分区,只有在SELECT结果的记录数>0的时候,才会创建分区。因此在不同的业务场景下,可能会选择不同的方案。
另外使用动态分区时需要注意的比较重要的一点是,动态分区会为每一个分区分配reduce数。比如说你在脚本上面写了:set mapred.reduce.tasks=100;
并且有两个分区:pt, if_online。如果结果集中pt=20121023,if_online=0/1,那么它就会为pt=20121023/if_online=0,pt=20121023/if_online=1各分配100个reduce。也就是说,namenode会同时处理200个文件的写操作。这在分区值很多的情况下,会成为一个灾难,容易直接把namenode给搞挂掉,是非常危险的。因此使用动态分区时,一定要清楚地知道产生的动态分区值,并且合理地设置reduce数量.
- hive中的动态分区和静态分区
- [原创]hive中的分区,动态分区和静态分区
- hive中的静态分区与动态分区
- hive中的静态分区与动态分区
- hive中的静态分区与动态分区
- hive中的静态分区与动态分区
- hive中的静态分区与动态分区
- hive中的静态分区与动态分区
- [hive]动态分区和静态分区
- hive静态分区和动态分区
- Hive(十四)--静态分区和动态分区
- Hive的静态分区和动态分区
- Hive静态分区和动态分区
- Hive 动态分区 & 静态分区
- Hive 分区,静态分区,动态分区
- [Hive]Hive静态分区与动态分区
- hive动态分区与静态分区
- HIVE 动态分区与静态分区
- Unity3D内存管理——对象池(Object Pool)
- 日历
- jquery实现点击某元素之外触发事件
- 期权交易与期货交易
- no GurobiJni55 in java.library.path
- hive中的动态分区和静态分区
- java内部类详解
- 回调函数例子
- Eclipse中Web工程Java类不编译问题
- Android 杂
- myeclipse2014闪退的解决方法
- yii2使用随记
- c#操作Excel
- struts2使用插件建立图表