1.分区表作用
分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过where子句中的表达式选择查询所需要的制定的分区,这样查询效率会提高很多。
2.多级分区
在很多业务场景中,单个分区往往不能把数据量降到我们所需要的级别,这时可以多增加几级分区字段,来降低每次计算时需加载的数据量。
3.关联分区表和数据
创建分区表后,我们把数据文件直接上传到HDFS上,往往无法查询到对应的数据,因为这时的表和数据时没有关联的。需要建立起分区表和数据文件的关联,才能通过sql查询到相应的数据。
创建关联有以下三种方式:
(1)执行修复命令:msck repair table student_table;
(2)上传数据后,通过add partition添加分区。
(3)创建数据文件夹后,先不要把数据放到规定的hdfs目录,而是通过load指令把数据加载到分区。
对于分区表的load,如果不指定load的分区,则HDFS上的默认分区值为“__HIVE_DEFAULT_PARTITION__”,如下图所示:
4.动态分区调整
动态分区是Hive-3.X.X的新特性。在insert或load数据时,指定了的分区字段为静态分区字段,需要根据数据来识别的是动态分区字段。
动态分区特性与以下参数相关。
需要注意的是,动态分区字段必须在select语句的最后出现。且与partiton子句的顺序一样。
动态分区指向分区表insert数据时,被写往的分区不由用户指定,而是由每行数据的最后一个字段的值来动态决定。使用动态分区,可只用一个insert语句将数据写入多个分区。
5.分区表相关操作
主要有以下操作。
(1)查看表的分区
show partitions student_table;
(2)创建分区,分区之间用空格分隔即可
alter table student_table add partition(day=‘20220808’);
alter table student_table add partition(day=‘20220808’) partition(day=‘20220809’) partition(day=‘20220810’);
(3)删除分区
alter table student_table drop partition(day=‘20220808’);
alter table student_table drop partition(day=‘20220808’), partition(day=‘20220809’), partition(day=‘20220810’);
分区之间必须用逗号分隔
(4)查看分区表结构
desc formatted student_table;