目录
一:静态分区和动态分区介绍
1、静态分区与动态分区的主要区别在于静态分区是手动指定,而动态分区是通过数据来进行判断。详细来说,静态分区的列实在编译时期,通过用户传递来决定的;动态分区只有在SQL执行时才能决定。
-
静态分区:分区是指定的一个固定值;
-
动态分区:分区根据读入的值动态写(可理解为变量形式)。
-
静态分区的表不能被加到动态分区里,可以增加新的分区但是只对后来加入的新数据有意义,已经写入数仓的文件不能被重新分区了,只能重写!
2、Hive分区是在创建表的时候用Partitioned by 关键字定义的,但要注意,Partitioned by子句中定义的列是表中正式的列,但是Hive下的数据文件中并不包含这些列,因为它们是目录名。
-
注意,动态分区不允许主分区采用动态列而副分区采用静态列,这样将导致所有的主分区都要创建副分区静态列所定义的分区:
-
可以理解为主分区为一个目录,然后在主分区的目录里面又创建了一个目录,且主分区的一个目录下只有一个目录,理解为多此一举
二:静态分区和动态分区区别
比如要新建一个增量表(inc),也不需要回刷数据,只涉及到一天的数据,那么选择静态分区,每天一个分区就好,新建的时候选择pt_dt作为分区键,进行分区设计