一、Hive分区。
是指按照数据表的某列或某些列分为多个区,区从形式上可以理解为文件夹,
比如我们要收集某个大型网站的日志数据,一个网站每天的日志数据存在同一张表上,由于每天会生成大量的日志,导致数据表的内容巨大,在查询时进行全表扫描耗费的资源非常多。那其实这个情况下,我们可以按照日期对数据表进行分区,不同日期的数据存放在不同的分区,在查询时只要指定分区字段的值就可以直接从该分区查找。
常用的分区字段都是按照时间来区分。
#创建分区表
create table t1 (
id int comment '编号',
name string comment '姓名',
age int comment' 年龄'
)
partitioned by (pdate string)
row format delimited fields terminated by '\001'
;
常用命令:
查看分区数据:
select * from t1 where pdate='2020-01-01';
查看有哪些分区:
show partitions t1;
向分区插入数据:
insert overwrite table t1 partition(pdate='2020-01-01')
select * from xxx
使用场景:
庞大的数据集可能需要耗费大量的时间去处理。在许多场景下,可以通过分区或切片的方法减少每一次扫描总数据量,这种做法可以显著地改善性能。
数据会依照单个或多个列进行分区,通常按照时间、地域或者是商业维度进行分区。比如vido表,分区的依据可以是电影的种类和评级,另外,按照拍摄时间划分可能会得到更一致的结果。为了达到性能表现的一致性,对不同列的划分应该让数据尽可能均匀分布。最好的情况下,分区的划分条件总是能够对应where语句的部分查询条件。
Hive的分区使用HDFS的子目录功能实现。每一个子目录包含了分区对应的