介绍
HIve做为数据仓库,往往会存储大量数据。当数据量过大时,会大大降低查询和统计效率。为了解决这个问题提出了分区(Partition)概念,将数据按照一定的规则进行分区,这样需要读取数据时,就可以直接扫面某个分区下的数据,避免全表扫描,提高了查询统计效率。例如按照地区(省份)进行分区,北京地区数据会落到一个分区目录中,天津地区数据落到另一个分区目录中,当要查询北京/天津地区数据时,直接扫描北京/天津分区目录,大大缩短了查询时间。
分区表创建
分区表创建方式有两种,静态分区和动态分区。二者区别在于是否手动创建分区,静态分区需要在插入数据前使用add partition命令添加分区,动态分区只需要在插入数据insert命令中指定分区字段即可。因此在存在大量分区时使用动态分区比较方便,不需要手动创建这些分区。
create table test(id int, name string) partitioned by (year int);
注意:分区表创建时分区字段不需要单独做为column指定,只需要在partitioned by()中指定字段和类型即可,多个分区字段用“,”隔开
插入数据
数据插入成功后,会在warehouse(HDFS)上创建对应分区目录,例如/hive/warehouse/test/year=2020,/hive/warehouse/test/year=2019等分区目录。