每年年终或新年伊始,公司管理层都要从各个角度比如部门、产品线等考察公司过去一年的业绩,作为数据分析团队,你需要向管理层准备这样的数据分析报告,而在此过程中,你可能会面临着这样的问题:
* 公司的组织架构在过去的一年中发生了调整,部分人员的所属部门也因此发生了变动,那各部门的业绩如何统计?
* 由于业务优化,公司一些产品的分类发生了变更,那全年各产品分类的销售数字如何统计?
为了生成上述业绩报告,多维数据分析是最常用与高效的技术手段。通过多维建模,将员工业绩、产品销售定义为事实表,把员工、产品、日期等定义为维度表,从而方便高效的从各个维度对公司核心 KPI 进行汇总统计和对比分析,以下便是基于销售数据的一个简单多维分析模型示例。
事实表一般会每天更新,而维度表尽管基本稳定,但也会随着时间发生变化,比如产品的分类、客户的国家、员工的部门等,这就是多维数据分析中的缓慢变化维概念(Slowly Changing Dimension, SCD)。如何处理这个变化,回答本文开始的问题,需要根据查询分析的特定需求分别处理,业界称之为缓慢变化维度的处理。
缓慢变化维度的常见处理方法
一般来说,最为常见的缓慢变化维度的处理方法有类别 1 (Type 1) 和类别 2 (Type 2),其具体处理方法和查询举例如下:
* 类别 1:维度表中直接覆盖原值,查询时只能使用最新的维度属性,反应维度最新状态(latest status);
* 类别 2:维度表中添加新的记录,通常增加有效期字段来区分,记录维度表所有历史变化,从而使得历史可追溯。在查询时一般使用当时的维度属性,反应历史事实(historical truth)。
以图表1的多维模型为例,假设产品 iPhoneX 在 2018 年双 11 后,分类从 3C 调整为了 Mobile,以下分别是类别 1 和类别 2 对产品维度表的处理方法,以及在查询 2018 年各产品分类的销售数字时的结果:
注:类别 2 的处理方法有各种具体实现方法,比如常见的拉链表,但基本原理一致。
讲到这里,相信各位已经对文章开头的问题已经有答案了,现在需要做的就是和业务方沟通,统一数据统计口径,然后在 ETL 或者数据仓库中具体实现。在一些复杂的场景中,还会使用到类别 3 和类别 4,甚至是混合的处理方法,本文不在此进行深入讨论,具体内容各位可以参考相关文档。
Kyligence的缓慢变化维处理实践
在大数据场景下,为了加速数据分析的性能与并发,基于多维模型(Cube)进行预计算是最为行之有效的方法之一。开源顶级项目 Apache Kylin 便是其中代表,而基于它为核心的企业级大数据分析平台 Kyligence Enterprise,更是实现了 PB 级数据的亚秒级查询响应和数以千计的高并发访问。
默认情形下 Apache Kylin 与 Kyligence Enterprise 对所有维度表均做类别 2 处理,每次 Cube 刷新时记录当时的维度表数据,以便在查询时使用并反应当时的历史事实。
启用缓慢变化维类别 1
在默认情形下,当用户需要使用最新维度表信息统计结果时,即需要类别 1 处理方法时,就需要刷新所有 Cube 历史数据,这带来了大量额外的计算开销,在海量数据场景下无法接受。因此,Kyligence Enterprise 从 v3.2.2 版本之后,内生支持缓慢变化维类别 1,用户可以在定义模型时,通过简单的设置,即可对维度表启用缓慢变化维类别1处理,如下图:
对于启用了缓慢变化维 Type 1 的维度表,Kyligence Enterprise 将仅保留一个最新版本,并在每次 Cube 数据刷新时更新该维度表,而在查询时,所有 Cube 历史数据(Segments)将与该最新的维度表联接并反馈查询结果,其原理如下图所示:
总结
以上便是多维分析中缓慢变化维与常见处理方法的简单介绍,以及 Kyligence 与 Apache Kylin 在大数据场景下的实践。
在海量数据多维分析场景下,Kyligence Enterprise 实现了灵活的缓慢变化维类别 1 和类别 2 的处理,既保障了查询性能,又避免了不必要的 Cube 数据刷新的开销,从而满足不同的数据分析需求,大幅提升大数据分析的效率。
未来 Kyligence 还会做更多探索与改进,比如类别 1 和类别 2 的灵活切换,支持更多缓慢变化维处理类型等,敬请期待。
更多详情,请参考 Kyligence 官方网站:
Kyligence - Enterprise OLAP for Big Datawww.kyligence.io
或 Kyligence Enterprise 用户手册:
https://docs.kyligence.iodocs.kyligence.io
关于Kyligence
Kyligence 由首个来自中国的 Apache 软件基金会顶级开源项目 Apache Kylin 核心团队组建,是专注于大数据分析领域创新的数据科技公司。Kyligence 提供基于 Apache Kylin 的企业级大数据智能分析产品 Kyligence Enterprise,以及基于公有云的托管式 Kylin 在线服务 Kyligence Cloud。目前,Kyligence 已赢得了海内外多家金融、保险、证券、电信、制造、零售、广告等企业级客户。