分区的使用及案例

分区表的使用

为什么使用分区

在使用select查询数据时,如果不限定条件那么会对整个表进行扫描,但是有很多数据并不是我们想要的,这样会消耗大量的时间。

分区表对应到hdfs上就是一个一个独立的文件夹(后面会有案例),在查找数据的时候我们只需要对这个文件夹中的数据进行扫面即可,大大提高了查询的效率。分区又分为静态分区和动态分区,后面会着重介绍两者的区别。

下面从一个简单的实例来了解分区:

静态分区

1.创建分区表:

    CREATE table student(id int, name string, age int)
    PARTITIONED by(dt string)
    ROW format delimited fields terminated by ','
    STORED as textfile;

2.插入数据

1,zs,18
2,li,19
3,ws,20
load data local inpath '/opt/data/student.txt' overwrite into table student partition(dt='2022-07-20');
insert into table student partition(dt='2022-07-21') values(4,'qq',21);
insert into table student partition(dt='2022-07-22') values(5,'ww',22);
insert into table student partition(dt='2022-07-23') values(6,'ee',23);

3.查询表中的数据

hive > select * from student;
OK
student.id	student.name	student.age	student.dt
1	zs	18	2022-07-20
2	li	19	2022-07-20
3	ws	20	2022-07-20
4	qq	21	2022-07-21
5	ww	22	2022-07-22
6	ee	23	2022-07-23
Time taken: 0.293 seconds, Fetched: 6 row(s)

​ 查询某个分区内的数据:

hive > select * from student where dt = '2022-07-20';
OK
student.id	student.name	student.age	student.dt
1	zs	18	2022-07-20
2	li	19	2022-07-20
3	ws	20	2022-07-20
Time taken: 0.361 seconds, Fetched: 3 row(s)

4.(1)查看表中的分区

hive > show partitions student;
OK
partition
dt=2022-07-20
dt=2022-07-21
dt=2022-07-22
dt=2022-07-23
Time taken: 0.104 seconds, Fetched: 4 row(s)

(2)查看hdfs对应的目录结构在这里插入图片描述
在这里插入图片描述

可以看到不同的分区在hdfs上对应着不同的目录

动态分区:

创建分区表:

  create table student_dync(
    id int,
    name string,
    age int
  ) partitioned by(dt string) 
  row format delimited fields terminated by ','
  stored as textfile;

向表中插入数据:

set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table student_dync partition (dt)
   select 
     id,
     name,
     age,
     dt 
    from student_tmp;

在向表中插入数据的时候并没有指定分区,然后查看下表中的分区:

hive > show partitions student_dync;
OK
partition
dt=2022-08-01
dt=2022-08-02
dt=2022-08-03
dt=2022-08-04
Time taken: 0.058 seconds, Fetched: 4 row(s)

在这里插入图片描述

也同样能够看到不同的分区对应着不同的目录。

总结 :动态分区和静态分区的区别

1.静态分区列是在编译时期通过手动指定的分区来确定的,动态分区是在sql执行的时候才能够确定。

2.由于在使用是需要手动指定分区,因此静态分区适用于分区数量较少、分区名明确的数据

3.动态分区适合分区数量多的情况,动态分区的分区字段位置在最后,多个分区字段按照分区顺序放置

4.插入数据时,静态分区支持load和insert两种方式,而动态分区只支持insert的方式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值