Hive表的动态分区和静态分区

在Hive中,分区通常是默认为静态分区的,就是在你插入表的时候需要指定partition(xxx='xxx'),这种在分区称为静态分析,我感觉在插入部分增量数据的时候是有效的,比如新增月份的数据,则可以指定partition(m='201911'),但是在初始化仓库的时候,如何让你的数据能够自动分区了,自动根据某个字段的值来将你的数据进行分区,前提是你设计表的时候已经设置好了分区的字段,这就是所谓的动态分区,个人觉得在书仓初始化的时候,动态分区还是相当有用的。
配置如下:

<property>
   <name>hive.optimize.sort.dynamic.partition</name>
   <value>true</value>
   <description>When enabled dynamic partitioning column will be globally sorted.
   This way we can keep only one record writer open for each partition value
   in the reducer thereby reducing the memory pressure on reducers.</description>
</property>
<property>
   <name>hive.exec.dynamic.partition.mode</name>
   <value>nostrict</value>
   <description>In strict mode, the user must specify at least one static partition in case the user accidentally overwrites all partitions.</description>
 </property>

其中hive.optimize.sort.dynamic.partition指定是否开启自动分区,hive.exec.dynamic.partition.mode是指你是否使用至少一个静态分区,strict是至少少一个静态分区,nostrict就是可以不是用静态分区。这里可能也是为了尽量避免太多的分区出现。

推荐阅读更多精彩内容