1、为什么要分区?
为了提高sql的查询效率
比如:
select * from orders where create_date='20230826';
假如数据量比较大,这个sql就是全表扫描,速度肯定慢。
可以将数据按照天进行分区,一个分区就是一个文件夹,当你查询20230826的时候只需要去20230826这个文件夹中取数据即可,不需要全表扫描,提高了查询效率。
总结:
1)分区表实际上就是对应一个HDFS文件系统上的独立的文件夹。
2)该文件夹下是该分区所有的数据文件。
3)Hive中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。
4)在查询时通过WHERE子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多
2、如何分区
根据业务需求而定,不过通常以年、月、日、小时、地区等进行分区
3、语法
create table tableName(
.......
.......
)
partitioned by (colName colType [comment '...'],...)
一般建表语句中的关键字都喜欢加 ed
总结:
分区就是在hdfs上创建文件夹,为了提高查询效率而已
4、分区实战
1)一级分区(分区字段只有一个)
create table if not exists part1(
id int,
name string,
age int
)
partitioned by (dt string)
row format delimited
fields terminated by ','
lines terminated by '\n';
由上面可以知道,dt字段不在普通字段里面,是一个伪列,但是可以当做普通字段使用。
搞两份数据user1.txt 和 user2.txt
user1.txt
1,zhangsan,21
2,lisi,25
3,wangwu,33
user2.txt
4,zhaoliu,38
5,laoyan,36
6,xiaoqian,12
加载数据:建表的时候有ed,不建表的时候的sql不加ed.
load data local inpath '/home/hivedata/user1.txt' into table part1 partition(dt='2023-08-25');
load data local inpath '/home/hivedata/user3.txt' into table part1 partition(dt=&#