zoukankan      html  css  js  c++  java
  • 数仓建模之维度表设计

    什么是维度

    维度是维度建模的基础和灵魂。在维度建模中,将度量称为“事实” ,将环境描述为“维度”,维度是用于分析事实所需要的多样环境。

    例如,在分析交易过程时,可以通过买家、卖家、商品和时间等维度描述交易发生的环境。

    什么是维度属性

    维度所包含的表示维度的列,称为维度属性。维度属性是查询约束条件、分组和报表标签生成的基本来源,是数据易用性的关键。

    例如,在查询请求中,获取某类目的商品、正常状态的商品等,是通过约束商品类目属性和商品状态属性来实现的;统计淘宝不同商品类目的每日成交金额,是通过商品维度的类目属性进行分组的;我们在报表中看到的类目、BC 类型( B 指天猫, C 指集市)等,都是维度属性。

    维度属性的作用一般是查询约束、分类汇总以及排序等。

    维度的基本设计方法

    维度的设计过程就是确定维度属性的过程,如何生成维度属性,以及所生成的维度属性的优劣,决定了维度使用的方便性,成为数据仓库
    易用性的关键。

    以淘宝的商品维度为例对维度设计方法进行详细说明

    第一步:选择维度或新建维度

    作为维度建模的核心,在企业级数据仓库中必须保证维度的唯一性。

    以淘宝商品维度为例,有且只允许有一个维度定义。

    第二步:确定主维表

    此处的主维表一般是 ODS 表,直接与业务系统同步。

    以淘宝商品维度为例, s_a uction_ auctions 是与前台商品中心系统同步的商品表,此表即是主维表。

    第三步:确定相关维表

    数据仓库是业务源系统的数据整合,不同业务系统或者同一业务系统中的表之间存在关联性。根据对业务的梳理,确定哪些表和主维表存在关联关系,并选择其中的某些表用于生成维度属性。

    以淘宝商品维度为例,根据对业务逻辑的梳理,可以得到商品与类目、SPU 、卖家、店铺等维度存在关联关系。

    第四步:确定维度属性

    确定维度属性主要包括两个阶段:

    • 第一个阶段:是从主维表中选择维度属性或生成新的维度属性

    • 第二个阶段是从相关维表中选择维度属性或生成新的维度属性

      以淘宝商品维度为例,从主维表( s_auction_auctions )和类目、SPU 、卖家、店铺等相关维表中选择维度属性或生成新的维度属性。

    确定维度属性的几点提示:

    • 尽可能生成丰富的维度属性

      比如淘宝商品维度有近百个维度属性,为下游的数据统计、分析、探查提供了良好的基础。

    • 尽可能多地给出包括一些富有意义的文字性描述

      属性不应该是编码,而应该是真正的文字。

      在淘宝维度建模中,一般是编码和文字同时存在,比如商品维度中的商品ID 和商品标题、类目ID 和类目名称等。ID 一般用于不同表之间的关联,而名称一般用于报表标签。

    • 区分数值型属性和事实

      数值型宇段是作为事实还是维度属性,可以参考字段的一般用途。如果通常用于查询约束条件或分组统计,则是作为维度属性;如果通常用于参与度量的计算, 则是作为事实。

      比如商品价格,可以用于查询约束条件或统计价格区间的商品数量,此时是作为维度属性使用的;也可以用于统计某类目下商品的平均价格,此时是作为事实使用的。

      另外,如果数值型字段是离散值,则作为维度属性存在的可能性较大;如果数值型宇段是连续值,则作为度量存在的可能性较大,但并不绝对,需要同时参考宇段的具体用途。

    • 尽量沉淀出通用的维度属性

      有些维度属性获取需要进行比较复杂的逻辑处理,有些需要通过多表关联得到,或者通过单表的不同字段混合处理得到,或者通过对单表的某个字段进行解析得到。

      此时,需要将尽可能多的通用的维度属性进行沉淀。一方面,可以提高下游使用的方便性,减少复杂度;另一方面,可以避免下游使用解析时由于各自逻辑不同而导致口径不一致。

      例如,淘宝商品的 property 字段,使用 key:value 方式存储多个商品属性。商品品牌就存存储在此字段中,而商品品牌是重要的分组统计和查询约束的条件,所以需要将品牌解析出来,作为品牌属性存在。例如,商品是否在线,即在淘宝网站是否可以查看到此商品,是重要的查询约束的条件,但是无法直接获取,需要进行加工,加工逻辑是:商品状态为 0 和 l 且商品上架时间小于或等于当前时间,则是在线商品g 否则是非在线商品。

      所以需要封装商品是否在线的逻辑作为一个单独的属性字段

    维度的层次结构

    维度中的一些描述属性以层次方式或一对多的方式相互关联,可以被理解为包含连续主从关系的属性层次。

    层次的最底层代表维度中描述最低级别的详细信息,最高层代表最高级别的概要信息。维度常常有多个这样的嵌入式层次结构。

    比如淘宝商品维度,有卖家、类目、品牌等。商品属于类目,类目属于行业,其中类目的最低级别是叶子类目,叶子类目属于二级类目,二级类目属于一级类目。

    在属性的层次结构中进行钻取是数据钻取的方法之一,下面通过具体的例子,看看如何在层次结构中进行钻取。

    假设己有一个淘宝交易订单,创建事实表。现在统计2015 年“双 11 ”的下单 GMV , 得到一行记录;沿着层次向下钻取,添加行业,得
    到行业实例个数的记录数;继续沿着层次向下钻取,添加一级类目,得到一级类目实例个数的记录数。可以看到,通过向报表中添加连续的维度细节级别,实现在层次结构中进行钻取。

    • 最高层次的统计

      image-20210609202329083

    • 钻取至行业层次

      image-20210609202426684

    • 钻取至一级类目层次

      image-20210609202449268

    雪花模型(规范化)

    当属性层次被实例化为一系列维度,而不是单一的维度时,被称为雪花模式。

    大多数联机事务处理系统( OLTP )的底层数据结构在设计时采用此种规范化技术,通过规范化处理将重复属性移至其自身所属的
    表中,删除冗余数据。这种方法用在 OLTP 系统中可以有效避免数据冗余导致的不一致性。

    比如在 OLTP 系统中,存在商品表和类目表,且商品表中有冗余的类目表的属性字段,假设对某类目进行更新,则必须更新商品表和类目
    表,且由于商品和类目是一对多的关系,商品表可能每次需要更新几十万甚至上百万条记录,这是不合理的。而对于联机分析处理系统( OLAP)来说,数据是稳定的,不存在OLTP 系统中所存在的问题。

    对于淘系商品维度,如果采用雪花模式进行规范化处理,将表现为如下形式:

    image-20210609202736996

    星型模型(反规范化)

    将维度的属性层次合并到单个维度中的操作称为反规范化。

    分析系统的主要目的是用于数据分析和统计,如何更方便用户进行统计分析决定了分析系统的优劣。采用雪花模式,用户在统计分析的过程中需要大量的关联操作,使用复杂度高,同时查询性能很差;而采用反规范化处理,则方便、易用且性能好。

    对于淘宝商品维度,如果采用反规范化处理,将表现为如下形式:

    image-20210609202906920

    从用户角度来看简化了模型,并且使数据库查询优化器的连接路径比完全规范化的模型简化许多。反规范化的维度仍包含与规
    范化模型同样的信息和关系,从分析角度来看,没有丢失任何信息,但复杂性降低了。

    采用雪花模式,除了可以节约一部分存储外,对于OLAP 系统来说没有其他效用。而现阶段存储的成本非常低。出于易用性和性能的考虑,维表一般是很不规范化的。在实际应用中,几乎总是使用维表的空间来换取简明性和查询性能。

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    PointToPointNetDevice doesn't support TapBridgeHelper
    NS3系列—10———NS3 NodeContainer
    NS3系列—9———NS3 IP首部校验和
    NS3系列—8———NS3编译运行
    【习题 7-6 UVA
    【Good Bye 2017 C】 New Year and Curling
    【Good Bye 2017 B】 New Year and Buggy Bot
    【Good Bye 2017 A】New Year and Counting Cards
    【Educational Codeforces Round 35 D】Inversion Counting
    【Educational Codeforces Round 35 C】Two Cakes
  • 原文地址:https://www.cnblogs.com/binbingg/p/14874382.html
Copyright © 2011-2022 走看看