简述:分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列。
这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描不关心的分区,快速定位,提高查询效率。
hive的分区有两种类型:
- 静态分区SP(Static Partitioning)
- 动态分区DP(Dynamic Partitioning)
对于静态分区,表的分区数量和分区值是固定的。新增分区或者是加载分区数据时,需要提前指定分区名。
对于动态分区,分区的值是不确定的,会根据数据自动的创建新的分区。
1.对于静态分区而言分区一开始就是规定好的,包括插入的时候都是根据自己写的东西进行插入。
2.所谓动态分区,分区的值是不确定的,分区的数量是不确定,皆由加载数据确定。
生产环境中,动态分区一般常用于创建新表后,需要一次性加载历史数据。
生产环境中,动态分区一般常用于创建新表后,需要一次性加载历史数据。(本人遇到过)。
且在插入的过程中动态分区还会报错,大概的意思是需要至少一个分区,但是对于全量插入一个表来说一个一个的分区插入属实麻烦,所以进行插入的时候要运行下列代码。
set hive.exec.dynamic.partition=true;
-- 允许所有的分区字段都可以使用动态分区,兼容严格模式
-- 更改动态分区模式为非严格模式
set hive.exec.dynamic.partition.mode=nonstr