记:单表分区上限任务报错解决方案

1、分区数为什么会多?

如果一张表,分区数较多,有几个原因:
1)是这张表的数据量较大,如果不分区就会全表查询,导致运行时间缓慢,所以需要将查询的字段设置为分区关键字,比如天、终端类型、小时等等
2)业务需求,一张表使用场景很多,业务使用会按照不同的场景来限制表的查询使用,所以分区字段需要很多,甚至有三级分区字段。

2、分区数太多会造成什么影响?

如果表的数据量很大,那么分区数多影响范围会小一点,但是如果表的数据量不大,分区数是因为业务需求导致很大,那么就会造成太多的小文件,在数据仓库中小文件太多简直就是灾难,不管在元数据维护方面还是数据处理方面,小文件都会带来资源的耗费和时间的延迟。

3、如何从业务方面解决小文件数?

1)对于数据量大且分区多的表,比如原始日志,那么建议定期将历史数据同步到廉价存储的机器组中,在需要的时候再回流数据到当前数据仓库中。也叫冷热数据分离存储。
2)对于数据量小且分区多的表,如果可以清理历史数据那么直接设置生命周期即可。但是如果历史数据需要保留,那么建议如下操作:将历史当天的全部分区数据都汇总为一个分区写入当前。举例:一张表有小时分区,一天24个。可以将当前的24个分区都写入小时=00的分区,将其他23个分区数据删除掉。这样既保留了数据,又清理了分区。

4、代码实现

--将数据插入到备份表
insert overwrite product_table_bak partition(ds,hh)
select 
    col1,
    col2,
    ds,
    hh
from 
    product_table
where ds  = '20200101';

--删除当天数据
alter table product_table drop if exists partition (ds='20200101'); 

--将当天的24个分区都插入到同一个分区中
insert overwrite product_table partition(ds,hh)
select 
    col1,
    col2,
    ds,
    '00' as hh
from 
    product_table_bak
where ds  = '20200101';
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值