2021-08-31 Hive 分区表的使用

8 篇文章 0 订阅

场景:有一个月,大概3T多的数据需要存储到hive中进行分析,不设置分区的话,查询数据的效率很差

分区键的选择:
这里选择按天分区

分区表的创建

drop table if exists test.demo1;
create table test.demo1(
row_key String comment "",
zdate String comment "",
vid BIGINT comment "",
lat BIGINT comment "",
lon BIGINT comment "",
spd BIGINT comment "",
dir BIGINT comment "",
alt BIGINT comment "",
zstate BIGINT comment ""
)comment ''
partitioned by (zday STRING COMMENT "")
row format delimited fields terminated by '\001'
null defined as ''
stored as textfile;

partitioned by (zday STRING COMMENT "")定义分区字段名称、类型、注释

将数据写入分区表

insert into test.demo1 partition (zday)
select
*,
substr(t1.zdate,1,10) as zday
from (select a1.* from test.demo1 a1 ) t1;

insert into table_name partition (zday)插入时指明分区字段
select *,substr(t1.zdate,1,10) as zday分区字段写在最后

在spark中也可以通过spark sql实现将数据写入分区表,RDD–>DataFrame,创建临时表,执行sql将临时表中的数据写入分区表中

show partitions table_name查看表中所有分区

总结:
一、什么时候使用分区
下列情况使用分区
(1)读取整个数据集需要花费很长时间
(2)查询几乎只对分区字段进行过滤
(3)分区列有合理数量的不同的值
(4)数据生成或ETL过程是按文件或目录名来分段数据的
(5)分区列值不在数据本身
二、什么时候不使用分区
(1)避免把数据分区到很多小数据文件
–不要对有太多惟一值的列进行分区
(2)注意:当使用动态分区时容易发生
–比如:按照fname来分区客户表会产生上千个分区

在Hive中如何实现数据分区
https://blog.51cto.com/u_11882756/1892468

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值