Hive_分区与分桶

本文详细介绍了Hive中的分区与分桶技术,包括分区的目的、方式和技术,以及分桶的意义和实现方法。分区通过目录结构减少数据扫描,提高查询效率,而分桶则进一步细化数据组织,用于数据抽样和JOIN操作。创建和管理分区涉及ALTER TABLE语句,动态分区需设置相关属性。分桶使用CLUSTERED BY关键字,确保数据分布均匀。分区与分桶结合使用能更好地优化大数据处理。
摘要由CSDN通过智能技术生成

一、为什么要分区和分桶

1.1 为什么要分区

随着系统运行时间增长,表的数据量会越来越大,而hive查询时通常是全表扫描,这样将导致大量的不必要的数据被扫描,从而大大提高查询效率。从而引进分区技术,可以将用户的整个表的数据在存储时划分为多个子目录,从而在查询时可以指定查询条件(子目录以分区变量的值来命名)eg:filedate=‘20210810’。

1.2 为什么要分桶

单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,需要采用分桶技术将数据更细粒度的划分和管理。从而引进分桶技术,分桶更多地用来做数据抽样、JOIN操作。

分区是分目录,分桶是分文件。

二、分区

2.1 怎么分区

根据业务,通常按照年、月、日、地区等

2.2 分区的技术

PARTIONED BY(col_name data_type)

  1. hive的分区字段使用的是表外字段。而mysql使用的是表内字段。
  2. hive的分区名区分大小写
  3. hive的分区本质是在表目录下面创建目录,但是该分区字段是一个伪列,不真实存在于数据中
  4. 一张表可以有一个或者多个分区,分区下面也可以有一个或者多个分区

2.3 分区的意义

可以让用户在做数据分析统计时缩小数据扫描的范围,提高查询效率。因为可以在select时指定要统计的分区,提高查询效率。eg:select * from bus_gps where filedate = 20210810;

2.4 创建分区表

一级:

create table if not exists consumers1(
uid int,
uname string,
uage int
)
PARTITIONED BY (country string)
row format delimited 
fields terminated by ','
;

分区表导入数据的方式:

load data local inpath '/usr/local/xxx' into table consumers1
partition(country='China'); #要指定分区

select * from part1 where country='China';	

二级:

create table if not exists consumers2(
uid int,
uname string,
uage int
)
PARTITIONED BY (year string,month string)
row format delimited 
fields terminated by ','
;

load data local inpath '/usr/local/xxx' into table consumers2
partition(year='2021',month='08'); 

load data local inpath '/usr/local/xxx' into table consumers2
partition(year='2021',month=08); 

select * from consumers2 where year='2021',month='08';

三级:

create table if not exists consumers3(
uid int,
uname string,
uage int
)
PARTITIONED BY (year string,month string,day string)
row format delimited 
fields terminated by ','
;

load data local inpath '/usr/local/xxx' into table consumers3
partition(year='2021',month='08',day='10'); 

load data local inpath '/usr/local/xxx' into table consumers3
partition(year='2021',month=08,day='10'); 

select * from consumers3 where year='2021',month='08',day='10';

显示分区:


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据翻身

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值