简述:分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列。

这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描不关心的分区,快速定位,提高查询效率。

hive的分区有两种类型:

静态分区SP(Static Partitioning)

动态分区DP(Dynamic Partitioning)

对于静态分区,表的分区数量和分区值是固定的。新增分区或者是加载分区数据时,需要提前指定分区名。

对于动态分区,分区的值是不确定的,会根据数据自动的创建新的分区。

1.对于静态分区而言分区一开始就是规定好的,包括插入的时候都是根据自己写的东西进行插入。

2.所谓动态分区,分区的值是不确定的,分区的数量是不确定,皆由加载数据确定。 生产环境中,动态分区一般常用于创建新表后,需要一次性加载历史数据。

生产环境中,动态分区一般常用于创建新表后,需要一次性加载历史数据。(本人遇到过)。

且在插入的过程中动态分区还会报错,大概的意思是需要至少一个分区,但是对于全量插入一个表来说一个一个的分区插入属实麻烦,所以进行插入的时候要运行下列代码。

set hive.exec.dynamic.partition=true;

-- 允许所有的分区字段都可以使用动态分区,兼容严格模式

-- 更改动态分区模式为非严格模式

set hive.exec.dynamic.partition.mode=nonstr

文章来源

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: