从零到一构建数据仓库
以下的讲解是基于电商行业构建离线数据仓库
第一步:熟悉业务,熟悉业务数据以及日志数据
熟悉业务:电商行业中包含的业务有:加购商品,下订单,支付订单,订单商品发货,订单商品收货等等。
熟悉业务数据:这里举一个下单的业务。在业务数据库中(MySQL)中,相关的表有订单表,订单明细表。这个订单中可能有对应的活动,优惠等等
熟悉日志数据:日志数据一般不存储在业务数据库中,但是我么数仓分析需要用户行为数据。对于我们的数仓分析,需要什么样的日志数据。例如,我需要统计用户行为漏斗分析(统计用户来到我们的网站浏览了什么页面,在页面停留了多久),这些需要我们跟前端人员沟通,需要在哪些地方增加埋点,以便我们的数据分析。
第二步:熟悉需求
我们需要基于需求,分析需要的维度表和事实表,筛选出原始表。并不是说业务系统中所有的表我们都需要。
我们使用的建模模型是维度模型,而不是范式建模。
- 范式建模:业务数据库使用的建模范式,主要是为了数据高效的存储,避免数据的冗余。但是对于数据分析来说,缺点很明显,3NF有效的避免了数据的冗余,但是分析的时候需要关联很多张表,大大的降低了分析效率,特别是针对于大数据领域。
- 维度建模:只需要确定事实表和维度表。事实表:客观的业务过程(下单,支付等),维度表:分析数据的角度(省份,商品,用户)。
我们只需要确定事实表(包含维度项和度量值),然后关联所需要的维度表就可以,大大减小的关联的次数。一般使用维度建模中的星型模型(一张事实表关联多张维度表),多个星型模型构成了星座模型。雪花模型的应用相关而言较少(一个事实表关联一个维度表,一个维度表还关联另外一张维度表,数据冗余低,但数据关联效率低。)
第三步:ODS层(operational data store)的构建
ODS层存储原始的数据,后续的分析都是基于ODS层。这一层的核心就是确定哪些表做全量同步,哪些表需要做增量同步。
全量同步:
- 针对于数据量小的表(例如省份表)
- 我们只关注数据的最终状态,不关注数据的一个变化情况(例如商品分类表)
- 通常是跟维度相关的表
例外情况:购物车表(全量),应对下游的存量型相关指标的统计,需求:统计各品类购物车情况的TOP10
增量同步:
- 数据量大的表(例如订单表)
- 关注数据的中间状态,关注数据是如何变化的(例如商品的评论表,订单的状态表)
- 通常是跟事实相关的表
ODS层存储与原数据一致,存储的格式一般为TSV,压缩格式为gzip。hive的默认压缩格式就是gzip。
第四步:DIM层 (dimension)+ DWD层(data warehouse detail)
基于维度建模理论,分析业务总线矩阵,确定所需要的维度表以及事实表。
业务总线矩阵:
| 业务过程 | 粒度 | 时间维度 | 用户维度 | 活动维度 | 商品维度 | 支付方式 | 优惠券维度 | 地区维度 | 度量值 |
|---|---|---|---|---|---|---|---|---|---|
| 下单 | 一个订单中的一个商品项 | √ | √ | √ | √ | √ | √ | 下单件数,下单原始金额,下单优惠金额,下单支付金额 | |
| 加购物车 | 一次加购物车的行为 | √ | √ | √ | 商品件数 |
我们以下单的业务行为来举例说明:
下单的业务中:用户 + 时间 + 商品id + 地区 + 原始金额 + 优惠金额 + 活动金额 + 最终下单金额
DIM层:确定维度表
我们会发现用户,时间,商品,地区不止在这个下的那事实表中使用到,在别的事实表中也会使用到,例如支付,加购,取消订单等等,这些业务行为中都会使用到这些字段。
我们就可以将这些字段抽取出来形成维度表,一个维度表中的字段应该尽可能的多,字段越多我们分析数据的角度就越多。以商品维度表为例:商品维度表对应业务数据库中的sku_info(主维表),sku_detail,sku_atrr_value,sku_sale_atrr_value,sku_category1,sku_category2,sku_category3等等。我们需要将这些字段联合在一起,组成一张商品维度表。
维度退化:支付方式只有在支付行为表中会使用这个维度。理论上我们也应该抽取成维度表,但是这个维度使用的范围小,并且数据量也不多,并不会增加很大的存储压力,所以可以不抽取,还不需要关联就可以直接使用。
DWD层:确定事实表
下单就是电商业务中客观发生的事件。这张表就是我们的事实表。一个事实表应该包含维度项,度量值。
下单中应该包含 -> 用户 地区 时间 商品 订单金额
用户 地区 时间 商品就是我们说的维度项,这是我们分析数据的角度,我们可以站在商品的角度分析下单,可以站在地区的角度分析下单。
订单金额是度量值,度量值一般是数值的形式,我们可以统计。
第五步:DWS层(data warehouse summary) + ADS层(application data service)
根据指标体系分析,构建指标体系。分析出具体要统计的指标。
指标类型:
原子指标:
——业务过程:从哪张表中取数据
——度量:取哪一列的数据
——聚合逻辑:做什么样的聚合处理(count,sum等聚合函数)
派生指标:
——原子指标
——统计周期:间隔多久统计一次
——统计粒度:group by的字段
——业务范围:需要统计什么样的数据(where条件)
衍生指标:
——派生指标结合而来,一般都是求比率,占比等
DWS层:
中间汇总层,业务过程相同,统计粒度相同,统计周期相同的指标统计汇总到一张中间表中。
方便后续的ADS层直接取数据,减少数据的重复读取和重复操作。
ADS层:
最终的统计结果,以需求为导向建表。
从dws中取数据进一步的聚合统计,最后得出结果。
更多推荐
所有评论(0)