谈笑间学会数仓—维度层设计①
维度的基本概念
维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实”,将环境描述为“维度”,维度是用于分析事实所需要的多样环境。例如,在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。
维度所包含的表示维度的列,称为维度属性。维度属性是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。例如,在查询请求中,获取某类目的商品、正常状态的商品等,是通过约束商品类目属性和商品状态属性来实现的;统计淘宝不同商品类目的每日成交金额,是通过商品维度的类目属性进行分组的;我们在报表中看到的类目、 BC 类型( 指天猫, 指集市)等,都是维度属性。所以维度的作用一般是查询约束、分类汇总以及排序等。
如何获取维度或维度属性?如上面所提到的,一方面,可以在报表中获取;另一方面,可以在和业务人员的交谈中发现维度或维度属性。因为它们经常出现在查询或报表请求中的“按照”( by )语句内。例如,用户要“按照”月份和产品来查看销售情况,那么用来描述其业务的自然方法应该作为维度或维度属性包括在维度模型中。
维度使用主键标识其唯一性,主键也是确保与之相连的任何事实表之间存在引用完整性的基础。主键有两种:代理键和自然键,它们都是用于标识某维度的具体值。但代理键是不具有业务含义的键, 一般用于处理缓慢变化维;自然键是具有业务含义的键。比如商品,在 ETL过程中,对于商品维表的每一行,可以生成一个唯一的代理键与之对应;商品本身的自然键可能是商品 ID 等。其实对于前台应用系统来说,商品ID 是代理键:而对于数据仓库系统来说,商品 ID 则属于自然键。
维度的基本设计方法
维度的设计过程就是确定维度属性的过程,如何生成维度属性,以及所生成的维度属性的优劣,决定了维度使用的方便性,成为数据仓库易用性的关键。正如Kimball所说的,数据仓库的能力直接与维度属性的质量和深度成正比。
某电商平台商品维度表设计步骤
第一步:选择维度或者新建维度。作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性。以商品维度为例,有且只允许有一个维度定义。
第二步:确定主维表。主维度表一般是ods层表,直接与业务系统同步。以商品维度为例:s_auction_aunctions是与前台商品中心系统同步的商品表,此表即为主维度表。
第三步:确定相关维度表。数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统的表之间存在关联性。根据业务的梳理,确定哪些表和主维度表存在关联关系。并选择其中的某些表用于生产维度属性。以商品维度为例,根据对业务逻辑的梳理