hive分区笔记

hive分区

1.一级分区

Hive 中的分区就是分目录。和Map中的切片是基本一致的。Map的切片也是为了提高并行度。把表中的数据分开放,当你查表里数据的时候写上分区信息,避免全表扫描; 是一个优化的方案

分区表实际上就是对应一个 HDFS 文件系统上的独立的文件夹,该文件夹下是该分区所有的数据文件。Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多。
在这里插入图片描述

2.创建分区表

​ 注:分区字段不能是表中已存在的数据, 可以将分区字段看做表的伪列

create table stu1(name string, age int, score int) partitioned by (site string)
    row format delimited fields terminated by ",";

3.导入数据

3-1. 静态分区

​ 注: 分区表加载数据时, 必须指定分区, 这种指定的方式叫做静态分区

3-1-1.从文件导入

​ 注:只能指定分区

load data local inpath "/root/data/day11/stu.txt" into table stu1 partition (site = "北京昌平");  #分区字段 数据应在最后位置

在这里插入图片描述

3-1-2. 从表导入
insert into stu1 partition (site="河南濮阳")
    (select s.name, s.age, s.score from stu s where s.site = "河南濮阳");

在这里插入图片描述

3-2. 动态分区

我们有的时候并不是一开始就知道数据要去哪个分区,最终的数据是要根据查询条件进入分区的。这种就叫做动态分区。所以一定是先查到结果,在把查到的结果填充到分区表中。以往的load模式就补满足我们的需求。
所以它是一个insert+select的模式;
在这里插入图片描述

insert into stu1 partition (site)
    select s.name, s.age, s.score, s.site from stu s;

​ 注:分区字段写在最[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nsrrPDDv-1643375510146)(C:\Users\ff530\AppData\Roaming\Typora\typora-user-images\image-20220128201601423.png)]
​ 设置为非严格模式(动态分区的模式,默认 strict,表示必须指定至少一个分区为静态分区,nonstrict 模式表示允许所有的分区字段都可以使用动态分区。

set hive.exec.dynamic.partition.mode="nonstrict";

在这里插入图片描述

4.查看分区

4-1 查看分区数量

show partitions stu1;

4-2 查看分区表结构

desc formatted stu1;

4-3单分区查看

select * from dept_partition where site='河南';

4-2:union多分区联合查看

select * from dept_partition where site='河南' union
select * from dept_partition where site='山东' union
select * from dept_partition where site='湖北';

select * from dept_partition where site='河南' or site='山东' or site='湖北';

5.二级分区

在这里插入图片描述
​ 建表

create table stu1(name string, age int, score int) partitioned by (state string, city string)
    row format delimited fields terminated by ",";

​ 导入数据

insert into stu1 partition (state,city)
    select s.name, s.age, s.score, s.state, s.city from stu s;

6.增加分区

alter table stu1 add partition (state="中国",city="天津");

增加多个分区, 用空格分割:

alter table stu1 add partition (state="中国",city="天津") partition (state="中国",city="山东");

7.删除分区

alter table stu1 drop partition (state="中国",city="天津");

删除多个分区, 用逗号分割

alter table stu1 drop partition (state="中国",city="天津"),partition (state="中国",city="山东");
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值