HIVE 动态分区与静态分区

原创 2015年11月21日 15:53:03

HIVE分区,实际上是通过一个路径来标识的,而不是在物理数据中。比如每天的数据,可能分区是pt=20121023这样,那么路径中它就会变成:/hdfs/path/pt=20121023/data_files。通过路径来标识的好处是,如果我们需要取特定分区的数据,只需要把这个路径下的数据取出来就可以了,不用扫描全部的数据。

HIVE默认是静态分区。但是有时候可能需要动态创建不同的分区,比如商品信息,我想根据它是否在线分成两个分区,这样后续如果要取在线商品,就只需要从在线的分区获取即可。动态分区可以通过下面的设置来打开:

  1. set hive.exec.dynamic.partition=true;  
  2. set hive.exec.dynamic.partition.mode=nonstrict;  

然后代码里就可以这么写:

  1. insert overwrite table tbl_name partition(pt, if_online)  
  2. select field1, field2, ..., pt, if_online  
  3. from tbl  
  4. where xxx;  

注意输入字段的最后面必须是动态分区字段。

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

  1. insert overwrite table tbl_name partition(pt=20121023, if_online=1)  
  2. select field1, field2, ..., fieldn  
  3. from tbl  
  4. 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中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与...

hive动态分区与静态分区

HIVE分区,实际上是通过一个路径来标识的,而不是在物理数据中。比如每天的数据,可能分区是pt=20121023这样,那么路径中它就会变成:/hdfs/path/pt=20121023/data_fi...

hive中的静态分区与动态分区

hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与...
  • jiedushi
  • jiedushi
  • 2012年03月15日 10:45
  • 24860

[原创]hive中的分区,动态分区和静态分区

分区在hive的物理存储中,体现为

hive动态分区与静态分区

http://blog.csdn.net/inte_sleeper/article/details/8106142 HIVE分区,实际上是通过一个路径来标识的,而不是在物理数据中。比如每天的...

HIVE 动态分区与静态分区

HIVE分区,实际上是通过一个路径来标识的,而不是在物理数据中。比如每天的数据,可能分区是pt=20121023这样,那么路径中它就会变成:/hdfs/path/pt=20121023/data_fi...

HIVE 动态分区与静态分区

HIVE分区,实际上是通过一个路径来标识的,而不是在物理数据中。比如每天的数据,可能分区是pt=20121023这样,那么路径中它就会变成:/hdfs/path/pt=20121023/data_fi...
  • baosq99
  • baosq99
  • 2017年01月11日 17:07
  • 126

[Hive]Hive静态分区与动态分区

1. 静态分区若分区的值是确定的,那么称为静态分区。下面举例一个业务场景: 统计程序每天都需要统计1号店中由精准化推荐带来的销售额,日期是确定的,现在需要将每天统计好的销售额数据插入到指定的日期分...

Hive静态分区表&动态分区表

Hive静态分区表&动态分区表

Hive 分区,静态分区,动态分区

一直对hive 的分区有点模糊,看到一篇具体一点的文章,转载过来。 http://f.dataguru.cn/thread-526681-1-1.html 1  导入作业数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:HIVE 动态分区与静态分区
举报原因:
原因补充:

(最多只允许输入30个字)