数仓cube表的调优策略

cube表调优在数仓当中是经常遇到,这里给出常见的调优方式和策略。其实就是拿sql的复杂度来换时间。如果需要快速响应的OLAP,可以参考Kylin等组件。
1. 避免不必要distinct

在统计时我们可能需要统计订单数,用户数等等,这个时候我们应该要明确表的最细粒度是什么,例如订单表的最细粒度是订单id,对于以最小粒度为统计目标的指标,我们并不需要加distinct去重。需要注意的是每增加一个distinct,我们的数据量在map阶段就会增加一倍,而这些膨胀的数据后会通过网络传输到reduce,必然会造成很大的浪费。具体原理可以参考

https://tech.meituan.com/2014/02/12/hive-sql-to-mapreduce.html。

2.减小数据总量

distinct倍增无法避免,但是我们可以将distinct的指标分开处理,创建一个临时表,并通过where条件 过滤掉部分数据,再通过groupby,将数据去重,进一步减少数据的总量,再进行统计,再与主表join。

3.去除衍生维度

类似城市id与城市名两者表达含义相同,我们在做聚合时可以考虑将衍生维度过滤,再计算出结果之后再通过维表将相应的衍生维度冗余回来。可以减少一部分的压力。

4.拆维度

经过以上的操作,如果作业的运行时长还是很长,为了确保及时产出,我们就需要拆维度,将原本的维度表拆分成2个或者多个维度表。拆表时需要考虑到将那个维度拆解出来。拆分主要考虑是否是核心维度,就是该维度与其他维度组合频率高,这样拆开的表能保证仍有一定的使用频率,避免创建表但无人使用的情况。
以上针对的是数据量一般,业务对响应时间无感。只需要每天按时拿到响应的报表数据,进行分析的业务场景。

5.使用专业的OLAP组件

如果你的数据量比较大,例如上千万,又想响应时间短,在秒级时间内完成查询。可以尝试使用Kylin来生成cube表,感兴趣的同学可以自行搜索相关内容。

总结

调优的主要目的就是减少cube表的倍增数据量。由于mapreduce的特性,我们通过减少总行数,总列数,甚至直接减少单个表的维度来减少数据生成的耗时,保证数据的及时产出。当基本数据量达到一定量级,或者维度过多,cube表太多,管理迭代困难,可以尝试使用接入Kylin来进行统一管理。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值