▌一、Hive分区简介
▎【1.1】为什么要分区?
随着系统运行时间的增加,表的数据量会越来越大,而Hive查询数据的数据的时候通常使用的是「全表扫描」,这样将会导致大量不必要的数据进行扫描,从而查询效率会大大的降低。 从而Hive引进了分区技术,使用分区技术,「避免Hive全表扫描,提升查询效率」
分区是:
将整个表的数据在存储时划分成多个子目录来存储(子目录就是以分区名来名称)
分区是有一定规则:
根据业务来,通常就是使用 年,月,日,地区等
▎【1.2】分区技术
partitioned by(分区名 数据类型)
Hive根据字段进行分区,并且分区是「区分大小写的」,但是该字段是一个「伪列」(可以查询,不存储实际的值)
一张表中可以有一个或多个分区,分区下面可以有一个或多个分区,理论分区最多8级。
▎【1.3】Hive中的分区和MySQL中的分区有什么区别?
Hive中的分时是使用的表外字段,MySQL使用的是表内字段
▎【1.4】Hive的分区种类
- 静态分区:「加载数据」的时候指定分区的值
- 动态分区:数据未知,根据分区的值确定建立分区
- 混合分区:静态+动态
在表创建的时候都是一样的,如何区分是静态还是动态还是混合呢?只有在赋值的时候才会决定使用是那种分区
▌二、Hive三种分区
▎【2.1】静态分区
▏建立一级分区
create table if not exists part1
(
uid int,
uname string,
uage int
)
partitioned by(country string) //用于分区的字段,并不会出现在表中
row format delimited fields terminated by 't';
user_china.txt
里面的数据的字段和part1
里面的字段相同,并没有country
字段
//在加载的过程中,指定加载到china分区,这是静态分区的特点
load data local inpath '/root/user_china.txt' into table part1 partition(country='china');
load data local inpath '/root/user_japa