- 基于kylin-3.0
联合维度
- 联合维度(Joint Dimension)一般用在同时查询几个维度的场景,它是一个比较强力的维度剪枝工具,往往把Cuboid的总数降低几个量级。
-
距离来说,如果用户的业务场景中总是同时进行A、B、C三个维度的查询分析,而不会出现聚合A、B或者聚合C这些更上卷的维度组合,那么这类场景就是联合维度所适合的。可以将维度A、B和C定义为联合维度,Kylin就仅仅构建Cuboid[A,B,C],而Cuboid[A,B][B,C][A]等不会被生成。最终的Cube结果下图所示,Cuboid的数量从16个减至4个。
联合维度示例 - 假设创建一个交易数据的Cube,它具有很多普通的维度,像交易日期cal_dt、交易的城市city、顾客性别sex_id和支付类型pay_type等。分析师常用的分析总是同时聚合交易日期cal_dt、交易的城市city和顾客性别sex_id,有时可能希望根据支付类型进行过滤,有时又希望看到所有支付类型下的结果。那么,在上述实例中,推荐设立一组聚合组,并建立一组联合维度,所包含的维度和组合方式如下:
- 聚合组(Aggregation Group):[cal_dt,city,sex_id,pay_type]
- 联合维度(Joint Dimension):[cal_dt,city,sex_id]
- 情况1(查询包含所有的联合维度):
select cal_dt,city,sex_id,count(*) from table group by cal_dt,city,sex_id
- 它将从Cuboid[cal_dt,city,sex_id,pay_type]中直接获取数据;
- 情况2(如果有一条不常用的查询,只聚合了部分联合维度):
select cal_dt,city,count(*) from table group by cal_dt,city
- 没有现成的Cuboid,Kylin会通过在线计算的方式,从现有的Cuboid[cal_dt,city,sex_id]中计算出最终结果。
- 联合维度使用场景:
- 维度经常同时在查询
where
或group by
条件中同时出现,甚至本来就是一 一对应。如customer_id何customer_name,将他们组合成一个维度。 - 将若干个低基数(建议每个维度基数不超过10,总的基数叉乘结果小于10000)的维度合并组成一个联合维度,可大大减少Cuboid的数量,利用在线计算能力,虽然会在查询时多耗费有限的时间,但相比能减少的存储空间何构建时间而言是值得的。
- 必要时可以将两个有强关系的高基维度组成一个联合维度,如合同日期何入账日期。
- 可以将查询时很少使用的若干维度组成一个联合维度,在少数查询场景中承受在线计算的额外时间消耗,但能大大减少存储空间和构建时间。
*以上浙西维度减枝操作都可以在Cube Designer
的Advanced Setting
中的Aggregation Groups
区域完成。
- 维度经常同时在查询
网友评论