Hive的分区
声明:本文为博主参考网上资料整理的文章,未经博主允许不得转载,如有问题,欢迎指正。
一、概述
分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描其他不关心的分区,快速定位,提高查询效率。hive中支持两种类型的分区:
静态分区SP(static partition)
动态分区DP(dynamic partition)
静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列是在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。
二、动态分区说明
关系型数据库(如Oracle)中,对分区表Insert数据时候,数据库自动会根据分区字段的值,将数据插入到相应的分区中,Hive中也提供了类似的机制,即动态分区(Dynamic Partition)。
按照常规的方法向分区表中插入数据,如果源数据量很大,那么针对一个分区就要写一个insert,非常麻烦,而且你必须先要知道源数据中都有什么样的数据才能创建分区。例如:
hive> insert overwrite table partition_test partition(stat_date='20110728',province='henan')
select
member_id
,name
from
partition_test_input
where
stat_date='20110728' and province=