精华内容
下载资源
问答
  • 数据仓库常见建模方法与建模实例演示

    万次阅读 多人点赞 2020-04-14 15:52:09
    1.数据仓库建模的目的? 为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑 访问性能:能够快速...

    1.数据仓库建模的目的?

      为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑

    1. 访问性能:能够快速查询所需的数据,减少数据I/O
    2. 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数 据系统中的存储成本和计算成本 
    3. 使用效率:改善用户应用体验,提高使用数据的效率
    4. 数据质量:改善数据统计口径的不一致性,减少数据计算错误 的可能性,提供高质量的、一致的数据访问平台

    2.常见的数据建模方法

    数据仓库本质是从数据库衍生出来的,所以数据仓库的建模也是不断衍生发展的。从最早的借鉴数据库的范式建模,到逐渐提出维度建模,Data Vault模型,Anchor模型等等,越往后建模的要求越高,越需满足3NF,4NF等。但是对于数据仓库来说,目前主流还是维度建模,会夹杂着范式建模。

    数据仓库建模方法论可分为:范式建模、维度建模、Data Vault模型、Anchor模型。

    3.常见四种建模方法的建模步骤与演示

    3.1.范式建模(E-R模型)

             将事物抽象为“实体”、“属性”、“关系”来表示数 据关联和事物描述;实体:Entity,关系:Relationship,这种对数据的抽象 建模通常被称为ER实体关系模型  
           ER模型是数据库设计的理论基础,当前几乎所有的OLTP系统 设计都采用ER模型建模的方式,且该建模方法需要满足3NF。Bill Inom提出的数仓理论,推荐采用ER关系模型进行建模,BI架构提出分层架构,数仓底层ods、dwd也多采用ER关系模型就行设计。
         但是 逐渐随着企业数据的高增长,复杂化,数仓全部使用ER模型建模 显得越来越不合时宜。为什么呢,因为其按部就班的步骤,三范式等,不适合现代化复杂,多变的业务组织。
    E-R模型建模的步骤(满足3NF)如下:
    1.  抽象出主体         (教师,课程)
    2. 梳理主体之间的关系   (一个老师可以教多门课,一门课可以被多个老师教)
    3. 梳理主体的属性    (教师:教师名称,性别,学历等)
    4. 画出E-R关系图

    3.2.维度建模

           维度建模,是数据仓库大师Ralph Kimball提出的,是数据仓库工程领域最流行的数仓建模经典。
          维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。

          Ralph Kimball提出对数据仓库维度建模,并且将数据仓库中的表划分为事实表、维度表两种类型。

    3.2.1.事实表

          在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件。

    以电商行业为例:电商场景:一次购买事件,涉及主体包括客户、商品、商家,产生的可度量值 包括商品数量、金额、件数等

             

        事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表。注意:这里需要值得注意的是,在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。

    1. 事务事实表,用于承载事务数据,通常粒度比较低,它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表,例如产品交易事务事实、ATM交易事务事实。
    2. 周期快照事实表,按照一定的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充。用来记录有规律的、固定时间间隔的业务累计数据,通常粒度比较高,例如账户月平均余额事实表。
    3. 累积快照事实表,用来记录具有时间跨度的业务处理过程的整个过程的信息,每个生命周期一行,通常这类事实表比较少见。

    3.2.2.维度表

            维度,顾名思义,业务过程的发生或分析角度。比如从颜色、尺寸的角度来比较手机的外观,从cpu、内存等较比比较手机性能维。维度表一般为单一主键,在ER模型中,实体为客观存在的事物,会带有自己的 描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。
           比如商品,单一主键:商品ID,属性包括产地、颜色、材质、尺寸、单价等, 但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的,日常主要的维度抽象包括:时间维度表、地理区域维度表等
     
    案例:某电商平台,经常需要对订单进行分析,以某宝的购物订单为例,以维度建 模的方式设计该模型
          涉及到事实表为订单表、订单明细表,维度包括商品维度、用户维度、商家维度、区域维 度、时间维度 
             商品维度:商品ID、商品名称、商品种类、单价、产地等 
             用户维度:用户ID、姓名、性别、年龄、常住地、职业、学历等 
             时间维度:日期ID、日期、周几、上/中/下旬、是否周末、是否假期等 

    维度分为:

    (1)退化维度(DegenerateDimension)

    在维度类型中,有一种重要的维度称作为退化维度,亦维度退化一说。这种维度指的是直接把一些简单的维度放在事实表中。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度一般在分析中可以用来做分组使用。

    (2)缓慢变化维(Slowly Changing Dimensions)

    维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD)。比如员工表中的部门维度,员工的所在部门有可能两年后调整一次。

    3.2.3.维度建模模型的分类

      维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型。
    (1) 星型模型

    星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。

    (2)雪花模型

        雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面也较差,所以一般不建议使用。尤其是基于hadoop体系构建数仓,减少join就是减少shuffle,性能差距会很大。

    尖叫提示:所以由上可以看出
    1.  星型模型和雪花模型主要区别就是对维度表的拆分
    2. 对于雪花模型,维度表的涉及更加规范,一般符合3NF,有效降低数据冗余,维度表之间不会相互关联,但是
    3. 而星型模型,一般采用降维的操作,反规范化,不符合3NF,利用冗余来避免模型过于复杂,提高易用性和分析效率,效率相对较高。

    (3)星座模型

         星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。数仓模型建设后期,大部分维度建模都是星座模型。

    3.2.4. 维度建模步骤

    维度建模步骤:选择业务过程->声明粒度->确定维度->确定事实。旨在重点解决数据粒度、维度设计和事实表设计问题。

    声明粒度,为业务最小活动单元或不同维度组合。以共同粒度从多个组织业务过程合并度量的事实表称为合并事实表,需要注意的是,来自多个业务过程的事实合并到合并事实表时,它们必须具有同样等级的粒度。 

    3.3 DataVault模型

              Data Vault是Dan Linstedt发起创建的一种模型方法论,Data Vault是在ER模型的基础上衍生而来,模型设计的初衷是有效的组织基础数据层,使之易扩展、灵活的应对业务的变化,同时强调历史性、可追溯性和原子性,不要求对数据进行过度的一致性处理。同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。
              Data Vault模型是一种中心辐射式模型,其设计重点围绕着业务键的集成模式。这些业务键是存储在多个系统中的、针对各种信息的键,用 于定位和唯一标识记录或数据

    Data Vault模型包含三种基本结构 :

    1. 中心表-Hub :唯一业务键的列表,唯一标识企业实际业务,企业的业务主体集合 
    2. 链接表-Link: 表示中心表之间的关系,通过链接表串联整个企业的业务关联关系 
    3. 卫星表- Satellite: 历史的描述性数据,数据仓库中数据的真正载体

    3.3.1 中心表-Hub

    3.3.2 链接表-Link

    3.3.3 卫星表- Satellite

    3.3.4 Data Vault模型​​​​​​建模流程

    1. 梳理所有主要实体 
    2. 将有入边的实体定义为中心表 
    3. 将没有入边切仅有一个出边的表定义为中心表 
    4. 源苦衷没有入边且有两条或以上出边的表定义为连接表 
    5. 将外键关系定义为链接表

    尖叫提示:Hub想像成人体的骨架,那么Link就是连接骨架的韧带组织, 而satelite就是骨架上的血肉。 Data Vault是对ER模型更近一步的规范化,由于对数据的拆解和更偏向于基础数据组织,在处理分析类场景时相对复杂, 适合数仓低层构建,目前实际应用场景较少
     

    3.4Anchor模型

    1.  Anchor是对Data Vault模型做了更近一步的规范会处理,初衷是为了 设计高度可扩展的模型,核心思想是所有的扩张只添加而不修改,于 是设计出的模型基本变成了k-v结构的模型,模型范式达到了6NF
    2. 由于过度规范化,使用中牵涉到太多的join操作,目前木有实际案例,仅作了解

    4.四种模型总结

    以上为四种基本的建模方法,当前主流建模方法为: ER模型、维度模型
    1. ER模型常用于OLTP数据库建模,应用到构建数仓时更偏重数据整合, 站在企业整体考虑,将各个系统的数据按相似性一致性、合并处理,为 数据分析、决策服务,但并不便于直接用来支持分析。缺陷:需要全面梳理企业所有的业务和数据流,周期长,人员要求高。
    2. 维度建模是面向分析场景而生,针对分析场景构建数仓模型;重点关注快 速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性 强,主要应用于数据仓库构建和OLAP引擎低层数据模型。优点:不需要完整的梳理企业业务流程和数据,实施周期根据主题边界而定,容易快速实现demo
    3.  数仓模型的选择是灵活的,不局限于某一种模型方法
    4. 数仓模型的设计也是灵活的,以实际需求场景为导向
    5. 模型设计要兼顾灵活性、可扩展,而对终端用户透明性
    6. 模型设计要考虑技术可靠性和实现成本

    5.常用建模工具

    建模工具,一般企业以Erwin、powerdesigner、visio,甚至Excel等为主。也有些企业自行研发工具,或使用阿里等成熟套装组件产品。

    展开全文
  • 数据仓库是为企业提供聚合,存储,投递,以及提供决策支持能提,数据仓库包含广泛数据并按照主题进行存储并且是在数据仓库流程过程中的一个部分。Willianm(Bill)H.Inmon提出过一个概念:”一个面向主题的,集成的,时间序列...
  • 05-数据仓库建模实例

    千次阅读 2019-04-20 11:16:00
    1、缘由  本文主要涉及的是建表,不是计算指标。 2、mysql表  假设mysql中存在下面的八张表:             ... ods层和源数据最好保持一致:  //创建用户表 drop ta...

    1、缘由

          本文主要涉及的是建表,不是计算指标。

    2、mysql表

                假设mysql中存在下面的八张表:

          

            

            

            

            

            

     

            

    3、ods

            ods层和源数据最好保持一致:    

    //创建用户表
    
    drop table if exists ods_user_info;
    create table ods_user_info( 
        `id` string COMMENT '用户id',
        `name`  string COMMENT '姓名', 
        `birthday` string COMMENT '生日' ,
        `gender` string COMMENT '性别',  
        `email` string COMMENT '邮箱',  
        `user_level` string COMMENT '用户等级',  
        `create_time` string COMMENT '创建时间'
    ) COMMENT '用户信息'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_user_info/'
    tblproperties ("parquet.compression"="snappy")
    
    
    //创建订单表
    
    drop table if exists ods_order_info;
    create table ods_order_info ( 
        `id` string COMMENT '订单编号',
        `total_amount` decimal(10,2) COMMENT '订单金额', 
        `order_status` string COMMENT '订单状态', 
        `user_id` string COMMENT '用户id' ,
        `payment_way` string COMMENT '支付方式',  
        `out_trade_no` string COMMENT '支付流水号',  
        `create_time` string COMMENT '创建时间',  
        `operate_time` string COMMENT '操作时间' 
    ) COMMENT '订单表'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_order_info/'
    tblproperties ("parquet.compression"="snappy")
    ;
    
    //创建订单详情表
    
    drop table if exists ods_order_detail;
    create table ods_order_detail( 
        `id` string COMMENT '订单编号',
        `order_id` string  COMMENT '订单号', 
        `user_id` string COMMENT '用户id' ,
        `sku_id` string COMMENT '商品id',  
        `sku_name` string COMMENT '商品名称',  
        `order_price` string COMMENT '下单价格',  
        `sku_num` string COMMENT '商品数量',  
        `create_time` string COMMENT '创建时间'
    ) COMMENT '订单明细表'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_order_detail/'
    tblproperties ("parquet.compression"="snappy")
    
    //创建支付流水表
    
    drop table if exists `ods_payment_info`;
    create table  `ods_payment_info`(
        `id`   bigint COMMENT '编号',
        `out_trade_no`    string COMMENT '对外业务编号',
        `order_id`        string COMMENT '订单编号',
        `user_id`         string COMMENT '用户编号',
        `alipay_trade_no` string COMMENT '支付宝交易流水编号',
        `total_amount`    decimal(16,2) COMMENT '支付金额',
        `subject`         string COMMENT '交易内容',
        `payment_type` string COMMENT '支付类型',
        `payment_time`   string COMMENT '支付时间'
       )  COMMENT '支付流水表'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_payment_info/'
    tblproperties ("parquet.compression"="snappy")
    ;
    
    //创建商品一级、二级、三级分类表
    
    drop table if exists ods_base_category1;
    create table ods_base_category1( 
        `id` string COMMENT 'id',
        `name`  string COMMENT '名称'
    ) COMMENT '商品一级分类'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_base_category1/'
    tblproperties ("parquet.compression"="snappy")
    ;
    
    drop table if exists ods_base_category2;
    create external table ods_base_category2( 
        `id` string COMMENT ' id',
        `name`  string COMMENT '名称',
        category1_id string COMMENT '一级品类id'
    ) COMMENT '商品二级分类'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_base_category2/'
    tblproperties ("parquet.compression"="snappy")
    ;
    
    drop table if exists ods_base_category3;
    create table ods_base_category3( 
        `id` string COMMENT ' id',
        `name`  string COMMENT '名称',
        category2_id string COMMENT '二级品类id'
    ) COMMENT '商品三级分类'
    PARTITIONED BY ( `dt` string)
    row format delimited  fields terminated by '\t' 
    location '/warehouse/gmall/ods/ods_base_category3/'
    tblproperties ("parquet.compression"="snappy")
    ;

     

    4、dwd  

            ①将文件的存储格式改为parquet

            ②对三级商品进行降维

                

     

     

     

                 注:从下面的建表sql中可以看出,只有商品表的创建有变化

     

            ③当然在导数据的过程中,也可以进行ETL(去空,去脏数据等)

    //创建用户表
    drop table if exists dwd_user_info;
    create external table dwd_user_info( 
       .....
    ) COMMENT ''
    PARTITIONED BY ( `dt` string)
    stored as  parquet
    location '/warehouse/gmall/dwd/dwd_user_info/'
    tblproperties ("parquet.compression"="snappy")
    
    //创建订单表
    drop table if exists dwd_order_info;
    create external table dwd_order_info ( 
        .....
    ) COMMENT ''
    PARTITIONED BY ( `dt` string)
    stored as  parquet
    location '/warehouse/gmall/dwd/dwd_order_info/'
    tblproperties ("parquet.compression"="snappy")
    ;
    
    //创建订单详情表
    drop table if exists dwd_order_detail;
    create external table dwd_order_detail( 
        .....
    ) COMMENT ''
    PARTITIONED BY ( `dt` string)
    stored as  parquet
    location '/warehouse/gmall/dwd/dwd_order_detail/'
    tblproperties ("parquet.compression"="snappy")
    ;
    //创建支付流水表 drop table if exists `dwd_payment_info`; create external table `dwd_payment_info`( ..... ) COMMENT '' PARTITIONED BY ( `dt` string) stored as parquet location '/warehouse/gmall/dwd/dwd_payment_info/' tblproperties ("parquet.compression"="snappy") //创建商品表 drop table if exists dwd_sku_info; create external table dwd_sku_info( `id` string COMMENT 'skuId', `spu_id` string COMMENT 'spuid', `price` decimal(10,2) COMMENT '' , `sku_name` string COMMENT '', `sku_desc` string COMMENT '', `weight` string COMMENT '', `tm_id` string COMMENT 'id', `category3_id` string COMMENT '1id', `category2_id` string COMMENT '2id', `category1_id` string COMMENT '3id', `category3_name` string COMMENT '3', `category2_name` string COMMENT '2', `category1_name` string COMMENT '1', `create_time` string COMMENT '' ) COMMENT '' PARTITIONED BY ( `dt` string) stored as parquet location '/warehouse/gmall/dwd/dwd_sku_info/' tblproperties ("parquet.compression"="snappy")

     

     

     5、DWS

        以每日为粒度,对用户这个实体进行轻度汇总,建立每日用户行为宽表

    drop table if exists dws_user_action;

    create external table dws_user_action (

      user_id string comment '用户 id',

      order_count bigint comment '下单次数 ',

      order_amount decimal(16,2) comment '下单金额 ',

      payment_count bigint comment '支付次数',

      payment_amount decimal(16,2) comment '支付金额 ',

      comment_count bigint comment '评论次数'

    ) COMMENT '每日用户行为宽表'

    PARTITIONED BY ( `dt` string)

    stored as parquet

    location '/warehouse/gmall/dws/dws_user_action/' tblproperties ("parquet.compression"="snappy");

     6、ads层

          ①求GVM

              定义:一定时间段内的成交总额。即用户下单金额:包括未付款、已付款。因为只要下单了,就说明已经有足够的吸引力了。
              需求:单日GMV,单日订单数量、单日收入等

              思路:从需求可以看出:因为每天都要统计,所以在dm层(ads层)还需要一张表:

                

            create table ads_gmv_sum_day(
                'dt'        string        comment '统计日期',
                'gmv_count'    long        comment '当日gmv个数',
                'gmv_amount'    decimal(16,2)    comment '当日gmv订单总金额',
                'gmv_payment'    decimal(16,2)    comment '当日支付金额'
            )comment '用户行为宽表'    
            stored as parquet                        //存储格式
            location '/warehouse/online_trade/ads/ads_gmv_sum_day'    
            tblproperties("parquet.compression"="snappy")            //压缩算法

     

     

          ②求转化率

              新访问用户转化率 = 单日新访问设备数/日活数

              新注册用户转化率 = 单日新注册用户数/日活数

              新付费用户转化率 = 单日新付费用户数/日活数

              付费用户转化率 = 单日消费用户数/单日日活数量

              思路:需要在ads中建立一张表:
          

    drop table if exists ads_user_convert_day;
    create table ads_user_convert_day(
    'dt'    string    comment '统计日期',
    'uv_count' bigint    comment '当日日活',
    'new_visitor_count'    bigint    comment '当日新增访问设备数量',
    'new_regi_u_count'    bigint    comment '当日新增用户注册数量',    //从user_info中的create_date ='2019-02-21'
    'new_consume_u_count'    bigint    comment '当日新增用户消费数量'
    'new_consume_count'    bigint    comment '当日消费数量'
    )comment '每日活跃用户转化情况'
    partitioned by('dt' string)    
    stored as parquet    //存储格式
    location '/warehouse/online_trade/ads/ads_user_convert_day'    
    tblproperties("parquet.compression"="snappy")    //压缩算法

     


           ③用户行为漏斗分析

            

        create table ads_event_convert_day(
            'dt'            string        comment '统计日期',
            'total_visitor_mcount'    bigint        comment '点击商品人数',
            'visit2Item_convert_ratio'    decimal(10,2)    comment '首页到点击商品转化率',
            'addcart_u_count'        bigint        comment '添加购物车人数',
            ........                    comment '点击商品到添加购物车转化率',
            ........                    comment '下单人数',
            ........                    comment '购物车到下单转化率',
            ........                    comment '支付人数',
            ........                    comment '下单到支付的转化率'
        )comment '每日活跃用户转化情况'
        partitioned by('dt' string)    
        stored as parquet                        //存储格式
        location '/warehouse/online_trade/ads/ads_event_convert_day'    
        tblproperties("parquet.compression"="snappy")            //压缩算法

     

    转载于:https://www.cnblogs.com/lihaozong2013/p/10740309.html

    展开全文
  • 数据仓库建模 Powerdesigner 维度建模 软件分析 建模 视频教程
  • 数据仓库工具箱——维度建模的完全指南 (英文)是数据仓库建模...作者kimballl是数据仓库方面的权威,他将多年的数据仓库建模实战经验、技巧融入本书。他提出的许多维度建模概念被广泛应用于数据仓库的设计和开发中。
  • 数据仓库常见建模方法与建模实例

    千次阅读 2020-07-04 23:12:57
    1.数据仓库建模的目的?   为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑 访问性能:能够...

    1.数据仓库建模的目的?

      为什么要进行数据仓库建模?大数据的数仓建模是通过建模的方法更好的组织、存储数据,以便在 性能、成本、效率和数据质量之间找到最佳平衡点。一般主要从下面四点考虑

    1. 访问性能:能够快速查询所需的数据,减少数据I/O
    2. 数据成本:减少不必要的数据冗余,实现计算结果数据复用,降低大数 据系统中的存储成本和计算成本 
    3. 使用效率:改善用户应用体验,提高使用数据的效率
    4. 数据质量:改善数据统计口径的不一致性,减少数据计算错误 的可能性,提供高质量的、一致的数据访问平台

    2.常见的数据建模方法

    数据仓库本质是从数据库衍生出来的,所以数据仓库的建模也是不断衍生发展的。从最早的借鉴数据库的范式建模,到逐渐提出维度建模,Data Vault模型,Anchor模型等等,越往后建模的要求越高,越需满足3NF,4NF等。但是对于数据仓库来说,目前主流还是维度建模,会夹杂着范式建模。

    数据仓库建模方法论可分为:范式建模、维度建模、Data Vault模型、Anchor模型。

    3.常见四种建模方法的建模步骤与演示

    3.1.范式建模(E-R模型)

             将事物抽象为“实体”、“属性”、“关系”来表示数 据关联和事物描述;实体:Entity,关系:Relationship,这种对数据的抽象 建模通常被称为ER实体关系模型  
           ER模型是数据库设计的理论基础,当前几乎所有的OLTP系统 设计都采用ER模型建模的方式,且该建模方法需要满足3NF。Bill Inom提出的数仓理论,推荐采用ER关系模型进行建模,BI架构提出分层架构,数仓底层ods、dwd也多采用ER关系模型就行设计。
         但是 逐渐随着企业数据的高增长,复杂化,数仓全部使用ER模型建模 显得越来越不合时宜。为什么呢,因为其按部就班的步骤,三范式等,不适合现代化复杂,多变的业务组织。
    E-R模型建模的步骤(满足3NF)如下:
    1.  抽象出主体         (教师,课程)
    2. 梳理主体之间的关系   (一个老师可以教多门课,一门课可以被多个老师教)
    3. 梳理主体的属性    (教师:教师名称,性别,学历等)
    4. 画出E-R关系图

    3.2.维度建模

           维度建模,是数据仓库大师Ralph Kimball提出的,是数据仓库工程领域最流行的数仓建模经典。
          维度建模以分析决策的需求出发构建模型,构建的数据模型为分析需求服务,因此它重点解决用户如何更快速完成分析需求,同时还有较好的大规模复杂查询的响应性能。维度建模是面向分析的,为了提高查询性能可以增加数据冗余,反规范化的设计技术。

          Ralph Kimball提出对数据仓库维度建模,并且将数据仓库中的表划分为事实表、维度表两种类型。

    3.2.1.事实表

          在ER模型中抽象出了有实体、关系、属性三种类别,在现实世界中,每一个操作型事件,基本都是发生在实体之间的,伴随着这种操作事件的发生,会产生可度量的值,而这个过程就产生了一个事实表,存储了每一个可度量的事件。

    以电商行业为例:电商场景:一次购买事件,涉及主体包括客户、商品、商家,产生的可度量值 包括商品数量、金额、件数等

             

        事实表根据粒度的角色划分不同,可分为事务事实表、周期快照事实表、累积快照事实表。注意:这里需要值得注意的是,在事实表的设计时,一定要注意一个事实表只能有一个粒度,不能将不同粒度的事实建立在同一张事实表中。

    1. 事务事实表,用于承载事务数据,通常粒度比较低,它是面向事务的,其粒度是每一行对应一个事务,它是最细粒度的事实表,例如产品交易事务事实、ATM交易事务事实。
    2. 周期快照事实表,按照一定的时间周期间隔(每天,每月)来捕捉业务活动的执行情况,一旦装入事实表就不会再去更新,它是事务事实表的补充。用来记录有规律的、固定时间间隔的业务累计数据,通常粒度比较高,例如账户月平均余额事实表。
    3. 累积快照事实表,用来记录具有时间跨度的业务处理过程的整个过程的信息,每个生命周期一行,通常这类事实表比较少见。

    3.2.2.维度表

            维度,顾名思义,业务过程的发生或分析角度。比如从颜色、尺寸的角度来比较手机的外观,从cpu、内存等较比比较手机性能维。维度表一般为单一主键,在ER模型中,实体为客观存在的事物,会带有自己的 描述性属性,属性一般为文本性、描述性的,这些描述被称为维度。
           比如商品,单一主键:商品ID,属性包括产地、颜色、材质、尺寸、单价等, 但并非属性一定是文本,比如单价、尺寸,均为数值型描述性的,日常主要的维度抽象包括:时间维度表、地理区域维度表等
     
    案例:某电商平台,经常需要对订单进行分析,以某宝的购物订单为例,以维度建 模的方式设计该模型
          涉及到事实表为订单表、订单明细表,维度包括商品维度、用户维度、商家维度、区域维 度、时间维度 
             商品维度:商品ID、商品名称、商品种类、单价、产地等 
             用户维度:用户ID、姓名、性别、年龄、常住地、职业、学历等 
             时间维度:日期ID、日期、周几、上/中/下旬、是否周末、是否假期等 

    维度分为:

    (1)退化维度(DegenerateDimension)

    在维度类型中,有一种重要的维度称作为退化维度,亦维度退化一说。这种维度指的是直接把一些简单的维度放在事实表中。退化维度是维度建模领域中的一个非常重要的概念,它对理解维度建模有着非常重要的作用,退化维度一般在分析中可以用来做分组使用。

    (2)缓慢变化维(Slowly Changing Dimensions)

    维度的属性并不是始终不变的,它会随着时间的流逝发生缓慢的变化,这种随时间发生变化的维度我们一般称之为缓慢变化维(SCD)。比如员工表中的部门维度,员工的所在部门有可能两年后调整一次。

    3.2.3.维度建模模型的分类

      维度建模按数据组织类型划分可分为星型模型、雪花模型、星座模型。
    (1) 星型模型

    星型模型主要是维表和事实表,以事实表为中心,所有维度直接关联在事实表上,呈星型分布。

    (2)雪花模型

        雪花模型,在星型模型的基础上,维度表上又关联了其他维度表。这种模型维护成本高,性能方面也较差,所以一般不建议使用。尤其是基于hadoop体系构建数仓,减少join就是减少shuffle,性能差距会很大。

    尖叫提示:所以由上可以看出
    1.  星型模型和雪花模型主要区别就是对维度表的拆分
    2. 对于雪花模型,维度表的涉及更加规范,一般符合3NF,有效降低数据冗余,维度表之间不会相互关联,但是
    3. 而星型模型,一般采用降维的操作,反规范化,不符合3NF,利用冗余来避免模型过于复杂,提高易用性和分析效率,效率相对较高。

    (3)星座模型

         星座模型,是对星型模型的扩展延伸,多张事实表共享维度表。数仓模型建设后期,大部分维度建模都是星座模型。

    3.2.4. 维度建模步骤

    维度建模步骤:选择业务过程->声明粒度->确定维度->确定事实。旨在重点解决数据粒度、维度设计和事实表设计问题。

    声明粒度,为业务最小活动单元或不同维度组合。以共同粒度从多个组织业务过程合并度量的事实表称为合并事实表,需要注意的是,来自多个业务过程的事实合并到合并事实表时,它们必须具有同样等级的粒度。 

    3.3 DataVault模型

              Data Vault是Dan Linstedt发起创建的一种模型方法论,Data Vault是在ER模型的基础上衍生而来,模型设计的初衷是有效的组织基础数据层,使之易扩展、灵活的应对业务的变化,同时强调历史性、可追溯性和原子性,不要求对数据进行过度的一致性处理。同时设计的出发点也是为了实现数据的整合,并非为数据决策分析直接使用。
              Data Vault模型是一种中心辐射式模型,其设计重点围绕着业务键的集成模式。这些业务键是存储在多个系统中的、针对各种信息的键,用 于定位和唯一标识记录或数据

    Data Vault模型包含三种基本结构 :

    1. 中心表-Hub :唯一业务键的列表,唯一标识企业实际业务,企业的业务主体集合 
    2. 链接表-Link: 表示中心表之间的关系,通过链接表串联整个企业的业务关联关系 
    3. 卫星表- Satellite: 历史的描述性数据,数据仓库中数据的真正载体

    3.3.1 中心表-Hub

    3.3.2 链接表-Link

    3.3.3 卫星表- Satellite

    3.3.4 Data Vault模型​​​​​​建模流程

    1. 梳理所有主要实体 
    2. 将有入边的实体定义为中心表 
    3. 将没有入边切仅有一个出边的表定义为中心表 
    4. 源苦衷没有入边且有两条或以上出边的表定义为连接表 
    5. 将外键关系定义为链接表

    尖叫提示:Hub想像成人体的骨架,那么Link就是连接骨架的韧带组织, 而satelite就是骨架上的血肉。 Data Vault是对ER模型更近一步的规范化,由于对数据的拆解和更偏向于基础数据组织,在处理分析类场景时相对复杂, 适合数仓低层构建,目前实际应用场景较少
     

    3.4Anchor模型

    1.  Anchor是对Data Vault模型做了更近一步的规范会处理,初衷是为了 设计高度可扩展的模型,核心思想是所有的扩张只添加而不修改,于 是设计出的模型基本变成了k-v结构的模型,模型范式达到了6NF
    2. 由于过度规范化,使用中牵涉到太多的join操作,目前木有实际案例,仅作了解

    4.四种模型总结

    以上为四种基本的建模方法,当前主流建模方法为: ER模型、维度模型
    1. ER模型常用于OLTP数据库建模,应用到构建数仓时更偏重数据整合, 站在企业整体考虑,将各个系统的数据按相似性一致性、合并处理,为 数据分析、决策服务,但并不便于直接用来支持分析。缺陷:需要全面梳理企业所有的业务和数据流,周期长,人员要求高。
    2. 维度建模是面向分析场景而生,针对分析场景构建数仓模型;重点关注快 速、灵活的解决分析需求,同时能够提供大规模数据的快速响应性能。针对性 强,主要应用于数据仓库构建和OLAP引擎低层数据模型。优点:不需要完整的梳理企业业务流程和数据,实施周期根据主题边界而定,容易快速实现demo
    3.  数仓模型的选择是灵活的,不局限于某一种模型方法
    4. 数仓模型的设计也是灵活的,以实际需求场景为导向
    5. 模型设计要兼顾灵活性、可扩展,而对终端用户透明性
    6. 模型设计要考虑技术可靠性和实现成本

    5.常用建模工具

    建模工具,一般企业以Erwin、powerdesigner、visio,甚至Excel等为主。也有些企业自行研发工具,或使用阿里等成熟套装组件产品。

    展开全文
  • 数据仓库实战教程

    万次阅读 2020-12-28 09:19:07
    1. 知识体系完善,从数仓的概念、建模、数仓工具的使用、数仓的落地实践都有,还会有很多小案例 2. 使用的技术都是当前企业最常用的技术,版本也是比较新的,不会导致大家看到一个代码,然后一执行发现语法不支持...

    数据仓库实战教程

    读者交流群已经开通了,有需要的可以私信进入读者交流群

    数据仓库已经是企业的数据竞争的核心了,学好数据仓库对提高自己和找到一份好的工作都至关重要,但是很多人对数仓的印象还是停留在写SQL的层面,其实今天的数仓更像是一个数据平台应用,我们学习的大数据技术其实最终的价值都体现在数据服务上,数仓是数据服务的基石,如果说业界以前还有离线和实时之分的话,那么现在实时数仓的提出与落地,未来数仓将是数据战争的最激烈的战场,一切大数据技术都将为数仓提供服务,也都将在数仓这一环节进行收口。

    本专栏主要专注于数仓工具学习、数仓建模以及业务建模、SQL 实战和平台建设,最后以3家公司的数仓建建设和实时数仓作为结尾项目,这份教程有以下特点

    1. 知识体系完善,从数仓的概念、建模、数仓工具的使用、数仓的落地实践都有,还会有很多小案例
    2. 使用的技术都是当前企业最常用的技术,版本也是比较新的,不会导致大家看到一个代码,然后一执行发现语法不支持或者废弃掉了
    3. 后续的更新也会很及时,不会说更新了一段时间断更了,在更新完大纲之后,我也会不断完善该系列,不断添加新的知识点
    4. 创作团队都是在企业一线员工,实战多于理论,还有很多经典的面试题,例如拉链表的优化、计算连续登陆、连续增长、最大在线用户数

    适合人群

    1. 小白对数仓感兴趣同学
    2. 有数仓经验但是缺乏全面认识的同学

    1. 数仓建模

    展开全文
  • 数据中台-数据仓库建模设计方法和实现 客户包括中国移动等数十个世界五百强客户...
  • 然后对数据分析进行概述,让大家对数据分析的含义和作用有一个整体的认知,让大家对自己接下来要做的事情,有一个基本的概念与了解。...1-1 课程导学1-2 数据分析概述第2章 数据获取数据从哪里来?怎么来?这一章,...
  • 2009-03-24 20:01 数据仓库工具箱维度建模的完全指南是数据仓库建模方面的经典著作 1996年第一版出版被认为是数据仓库方面具有里程碑意义的事件作者kimballl是数据仓库方面的权威他将多年的数据仓库建模实战经验技巧...
  • ├─(第一节课)数据仓库的概念和ER实体模型 │ 数据仓库的概念和ER实体模型1.mp4 │ 数据仓库的概念和ER实体模型2.mp4 │ 数据仓库的概念和ER实体模型3.mp4 │ 数据仓库的概念和ER实体模型4.mp4 │ 数据仓库的概念...
  • 背景: 物美的管理来说,数据仓库平台对其至关重要。因为数据平台是其数据化运营的前提和基础。 基于数据仓库平台生成的各种销售报表和库存报表是公司管理层和各个城市运营人员以及门店运营人员决策的主要依据。...
  • 事实表是数据仓库维度建模的核心,事实表是描述已经发生的业务过程,仅仅围绕业务过程设计,通过粒度和事实(度量)来描述。 其中事实又可以分为三种 可加性事实 可以按照任意维度进行统计 如金额 半可加性事实 ...
  • 一、数据仓库数据仓库(Data Warehouse),是为企业所有决策制定过程,提供所有系统数据支持的战略集合通过对数据仓库中数据的分析,可以帮助企业,改进业务流程、控制成本、提高产品质量等数据仓库,并不是数据的...
  • 数仓建模实战(建模流程) 前面我们介绍了PdMan,也就是CHINER,当然也介绍了二者的关系,前面主要介绍了CHINER有哪些功能,可以参考数仓建模—建模工具PDMan(CHINER) 入门介绍,但是没有实际的演示案例,今天我们就...
  • 本课程基于Python3全程以真实案例驱动,带你科学系统地学习数据分析与挖掘建模领域的科学思维、必会知识、常用工具、完整流程以及老师多年的经验技巧。让你轻松转行,快速胜任数据分析师岗位,逆袭成为数据掘金时代...
  • 数仓笔记 数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS 尚硅谷数仓实战之1项目需求及架构设计 尚硅谷数仓实战之2数仓分层+维度建模 尚硅谷数仓实战之3数仓搭建
  • 1、为什么要进行数据仓库分层? 2、需要掌握哪些数仓理论知识? 3、如何进行关系建模与维度建模? 4、如何进行数据仓库搭建? 一、数仓分层1.1 为什么要分层1.2 数据集市与数据仓库概念1.3 数仓命名规范1.3.1 表...
  • 《数据仓库工具箱—维度建模的完全指南》是数据仓库建模方面的经典著作, 1996年第一版出版被认为是数据仓库方面具有里程碑意义的事件。作者kimballl是数据仓库方面的权威,他将多年的数...
  • 数仓笔记 数据仓库和数据集市详解:ODS、DW、DWD、DWM、DWS、ADS 尚硅谷数仓实战之1项目需求及架构设计 尚硅谷数仓实战之2数仓分层+维度建模 尚硅谷数仓实战之3数仓搭建
  • 根据SAP系统表结构,制作“资产负债表”相关数据逻辑(利用TCODE事务码查询,找到在SAP系统中运用到的底层表以及底层表关系,的方法,较有考究,另一期写) SAP系统与“资产负债表”相关底层表抽取 根据业务需求,...
  • 后台回复【工具箱】获取电子书---《数据仓库工具箱—维度建模的完全指南》是数据仓库建模方面的经典著作, 1996年第一版出版被认为是数据仓库方面具有里程碑意义的事件。作者kimballl...
  • 项目上线了,结合数据仓库实战视频,复盘总结下。 历史的浪潮 1、数仓痛点 感受到疼痛的点 烟囱式开发形成的数据孤岛和重复计算:–建模规范和开发规范 各业务系统都存在汇率、证券信息等公开市场信息的...
  • 笔者多年身处一线互联网...内容核心会分为两大板块:数据仓库实战与数据产品实战。 接下来的文章中逐步介绍以下内容: 数据仓库实战(一):数仓分层分域规范 数据仓库实战(二):数仓表命名规范 数据仓库实战(...
  • 数据仓库项目实例(马蜂窝数据仓库)

    千次阅读 2019-10-28 11:58:08
    一、马蜂窝数据仓库与数据中台 最近几年,数据中台概念的热度一直不减。2018 年起,马蜂窝也开始了自己的数据中台探索之路。 数据中台到底是什么?要不要建?和数据仓库有什么本质的区别?相信很多企业都在关注...
  • 点击上方蓝色字体,选择“设为星标”回复”面试“获取更多惊喜本期内容主要介绍使用Hive作为数据仓库的应用场景时,相应的库表结构如何设计。Hive数据仓库建立用户画像首先需要建立数据仓库,用...
  • 数据仓库原理&实战(理论)

    千次阅读 2021-11-21 08:20:12
    数据仓库的诞生背景 数据仓库诞生的原因 历史数据积存 企业数据分析需要 历史数据积存 历史数据使用频率低,堆积在业务库中,导致性能下降 企业数据分析需要 各个部门自己建立独立的数据抽取系统,导致数据不...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,667
精华内容 1,466
关键字:

数据仓库建模实战