写的自己看的KylinCube优化指南

前同事交接留下一个expansion rate244%,cube size高达400G的超大cube,且报表中包含多条查询时长超过20s的SQL语句,报表彻底瘫痪无法打开。经过多次血泪尝试,终于将cube size缩小到80+G基本满足查询需求,并总结了以下kylin cube优化原则。


Advanced Aggregation GROUP

首先来说一下AAG中三种规则的含义。

  • Mandatary rules. 必要的字段。group_by或是filter中常用的字段。

  • Hierarchy rules. 结构字段。按父子关系从前往后依次排列字段。

  • Joint rules. 同时出现的字段。可以是扎堆出现的字段,也可以把所有不常用但又不能舍弃的字段都塞在joint rules里。是有效优化cube的方法。

在优化400G巨型cube中我犯了一个错误,一心一意想减少不必要的字段于是从AAG中剔除了所有仅作为筛选器使用、非group by的字段。这些筛选器字段中,有几个小基数但频繁作为筛选条件查询的字段,每个值包含上千万行的数据量,导致使用这些字段做为Where条件的SQL查询超时。解决办法就是:将这些小基数但数据量巨大的字段也纳入到AAG中。

所以呢,设计AAG时也不要太严苛了,less is more。

RowKeys

字段顺序影响查询速度,哪些字段要往前放呢:

  • Mandatory字段

  • 频繁查询的字段

  • 高基数的字段

你可能感兴趣的:(写的自己看的KylinCube优化指南)