hive修改分区字段值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hive修改分区字段值相关的知识,希望对你有一定的参考价值。

参考技术A 修改分区自算值的时候,只要在软件里面有一个工具,工具里面可以进行这些数值的更改,更改就可以完成分区。
分区就可以在里面有一些详细的参数更改。

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;

注意输入字段的最后面必须是动态分区字段。需要在select中查出分区的字段

看一下与静态分区写法的区别:

insert overwrite table tbl_name partition(pt=20121023, if_online=1)
select field1, field2, ..., fieldn
from tbl
where xxx;

不需要在select中查出分区的字段,已指定值

动态分区与静态分区还有一个细微的差别是,静态分区一 定会创建分区,不管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数量。
--------------------- 

原文:https://blog.csdn.net/inte_sleeper/article/details/8106142 
 

区别:

1 动态分区需要添加两个设置

2 动态分区的表在插入时需要把分区字段查询出来,静态分区不需要

3 动态分区在数据量大于0时才会创建分区,静态分区的数据量为0时也会创建分区

以上是关于hive修改分区字段值的主要内容,如果未能解决你的问题,请参考以下文章

Hive基础知识

hive表新增字段后,新字段无法写入的问题 -- cascade

hive表添加字段导致历史分区查询报错

hive建表时partitioned分区字段类型只能用string吗?可以用其他的字段类型吗?

hive 分区表

hive表有多个分区字段时如何只更新一个分区字段?