数仓学习笔记

数仓学习笔记

DataWarehouse是一种思想

OLAP&OLTP

  1. OLTP联机事务处理
    1. 事务 时效性比较强
    2. 保障了数据的安全性
    3. 满足数据库三范式
  2. OLAP联机分析处理
    1. 对历史数据进行分析

数据建模

性能:良好的模型能帮我们快速查询需要的数据,减少数据的IO吞吐

成本:减少数据冗余,计算结果复用,从而降低存储和计算成本

效率

  1. ER建模

    1. 三范式
    2. 规范性较好,冗余小,数据集成和数据一致性方面得到重视
    3. 面向应用
  2. 维度建模

    1. 维度建模将表分为三种类别:
      1. 事实表:本次事实发生的一个主题
      2. 面向分析,为了提高查询性能可以增加数据冗余,反规范化的设计技术

维度表

  1. 定义:分析数据的环境

    1. 维度表的范围很宽,每个属性都可以作为查询条件

    2. 维度的数据量一般在一个有限的范围内,相比起事实表小巫见大巫

  2. 设计原则

    1. 维度属性尽量丰富,为数据使用打下基础
    2. 给出详实的,富有意义的文字描述
    3. 区分数值型属性和事实
      1. 一个数字可能是度量值也可能是属性值
      2. 常用于查询约束条件或分组统计,就是作为维度属性
      3. 用于参与度量的计算,则是作为事实
    4. 退化维度:将属性不多的维度表的值直接放到事实表中,加快查询效率
    5. 缓慢变化维:
      1. 直接覆盖原值(不看历史数据,简单粗暴)
      2. 增加属性列
      3. 拉链表(需要在维度表再增加三列)
        1. 有效日期
        2. 截止日期
        3. 行标识(可选)
  3. 设计方法

    1. 数据仓库的能力直接与维度属性的质量和深度成正比
  4. 维度整合

    多张表如果主键一致,但是每张表属性不同,如果合并可以考虑垂直整合

    如果逐渐不同,但是属性相差无几,如果合并表可以考虑水平整合

    1. 垂直整合
    2. 水平整合

    拆分

    1. 一张维度表要存储所有的商品信息
    2. 通用属性存放到主维表,独有属性存放到从维表
    3. 如果以后新增商品,商品的通用信息放主维表,独有信息放从维表

事实表

  1. 概念

    1. 每行数据代表一个业务数据
    2. 一条记录所表达的业务细节程度被称为粒度
    3. 为了度量业务,需要定义度量值,度量值一般为数值类型,数组可分为可加,半可加,不可加
    4. 维度属性也可以存储到事实表中,这种存储到事实表中的维度列被称为"退化维度"
  2. 设计原则

    1. 原则1:尽可能包含所有与业务过程相关的事实
    2. 原则2:只选择与业务过程相关的事实
    3. 原则3:分解不可加性事实为可加的组件
    4. 原则4:在选择维度和事实之前必须先声明粒度
      1. 理论来说越细越好,一般从最低级别的粒度开始
    5. 原则5:在同一个事实表中不能有多种不同粒度的事实
    6. 原则6:事实的单位要保持一致
    7. 原则7:对事实的null值要处理
      1. 使用0代替null,或者使用无效随机值代替null
    8. 原则8:使用退化维度提高事实表的易用性
  3. 设计方法

    1. 选择业务过程以及确定事实表类型

      明确了业务过程后,根据具体业务需求来选择与维度建模有关的业务过程

      1. 声明粒度
      2. 确定维度
      3. 确定事实
      4. 冗余维度
    2. 如果说维度表能够进行复用,并且维度表字段较多,一般就不会进行退化

      1. 只有一些字段较少的,复用较少的会进行退化
      2. 比较典型的就是字典表
  4. 事实表分类

    1. 事务型事实表

      1. 单事务事实表
        1. 将相同的事务放在一张事实表中
        2. 多个事务有多张事实表
      2. 多事务事实表
        1. 将多个事务存放在一张表中
    2. 周期型快照事实表

      1. 固定时间间隔的数据去产生结果

        一般情况下,我们查看事务型事实表就可以知道自己的交易情况

        但随着时间的推移,事务型数据越拉越多,就需要周期快照事实表帮助我们统计结果

        周期快照事实表统计结果:

        ​ 需要按照多个维度的组合间隔一段时间定时去生成

      2. 快照的粒度

        1. 事务型:取决于事务的细节程度
        2. 周期型:取决于时间 天、周、月、季、年
      3. 密度

        1. 周期型:密集 ,不管是否有事务发生,都会按照间隔进行计算
        2. 事务型:系数 ,事务发生的时候才会记录
      4. 可加性

        1. 周期型:一般都是半可加 ,因为是统计的结果
        2. 事务型:一般视为可加型
      5. 快照采样状态

        1. 快照事实表以预定的间隔采样状态度量。这种间隔联合一个或多个维度,将被用来定义快照事实表的粒度,每行都将包含记录所涉及状态的事实。
    3. 累积型快照事务表

      跟踪业务的事实变化,覆盖过程的整个生命周期

数据组织方式

  1. 星型模型
    1. 由一个事实表和一组维度表组成;每个维表都有一个维作为主键,这些维的主键组合成事实表的主键
    2. 一种非正规化的结构,多为数据集的每一个维度都直接与事实表相连接,所以数据存在冗余
  2. 雪花模型
    1. 有一个或多个维度表没有直接连接到事实表上,而是通过其他维表连接到事实表上
    2. 相比起星型模型,虽然减少了数据的冗余,但查询的时候增加了表与表之剑的连接
  3. 星座模型
    1. 需要多个事实表共享维度表,可以视为星型表的集合

建模步骤

  1. 业务处理过程
    1. 维度建模是紧贴业务
    2. 要分析的数据不是凭空想象的,而是基于管理层或者产品想要了解的结果
    3. 我们要对原始数据进行分析得到对应的结果
  2. 声明粒度
    1. 选择能选的最小粒度
    2. 维度选择越小:数据量越大,支持的业务越多,计算量也越多[上卷]
    3. 维度选择越大:数据量越小,支持的计算越少
    4. 我们在进行计算的时候,只能计算当前粒度,以及大于当前粒度的数据
  3. 确认维度
    1. 维度退化
    2. 确保维度表中不出现重复数据,应使维度主键唯一
  4. 确认事实
    1. 度量值:如个数,件数,金额
    2. 事实表就是用来度量的,基本都以数量制表示,每行对应一个度量,每行中的数据是一个特定级别的细节数据
    3. 同一事实表中的所有度量必须具有相同的粒度
    4. 最实用的事实就是数值类型和可加类事实

数仓分层

  1. 原因

    1. 用空间换时间

      通过大量的预处理来提升应用系统的用户体验(效率),但是会存在大量的冗余数据

    2. 增强扩展性

      上游数据的改变不会对下游产生影响,中间层可以把数据处理成你想要的样子

    3. 分层管理

      把复杂的工作拆成了多个简单的工作

  2. 优点

    1. 清晰数据结构
    2. 方便数据血缘追踪
    3. 减少重复开发
    4. 把复杂问题简单化
    5. 屏蔽原始数据的异常
  3. 明细

    1. 数据分层每个企业根据自己的业务需求可以分成不同的层次,但是最基础的分层思想,理论上数据分为三个层

      1. ods(Operate data store)(操作数据存储层)原始数据层

        1. 最接近数据源中数据的一层.数据源中的数据,经过抽取、洗净、传输(ETL)之后,装入ODS层
        2. 本层的数据,总体上大多是按照源头业务系统的分类方式而分类的
      2. DW(Data warehouse)数据仓库层

        1. 这层从ODS层中获取的数据按照主题建立各种数据模型[维度模型]
        2. 基于维度建模创建事实表与维度表

        又分为两层:

        1. DWD明细数据层
          1. 存放事实表,并进行一些列的添加[维度退化]
        2. DWS汇总数据层
          1. 存储宽表,事实数据+维度数据
          2. 方便进行计算,减少表的连接
      3. ADS(Appliication Data Service)应用数据服务

        1. 将计算的结果存储到ADS层,里面的数据要保证的原则就是 不需要进行二次计算
      4. DIM维度表(可以视为在DW层,也可以视为在额外的区域)

        1. 存放维度表

ETL

  1. 概念:

    ETL是将业务系统的数据经过抽取(Extract)、清洗转换(Transform)之后加载(Load)到数据仓库的过程

  2. 流程:

    1. 抽取:抽取是从各个不同的数据源抽取到ODS
    2. 转换:在抽取的过程中,将数据转变成需要的字段类型或者改为指定字段值
    3. 加载:就是将数据载入到数据仓库的操作
  3. 细节:

    1. 抽取

      1. 全量抽取

        将表中所有的数据全部拉取到DW中

        数据相对较少,每条数据都有可能被操作

        全量的好处在于简便

      2. 增量抽取

        基于某些条件(时间、标识)将服务条件的数据拉取到DW中

        数据量大,每天新增数据一般不会影响历史数据

        拉去的数据相对较少,但是需要进行判断,所以较为复杂

    2. 数据清洗转换

      1. 通常是从业务系统到ODS做清洗,将脏数据和不完整数据过滤掉,在从ODS到DW的过程中转换,进行一些业务规则的计算和聚合
  4. ETL常用工具

    1. 首先要定位数据的类型,包括行为数据和业务数据
    2. 行为数据就是用户到网站后所有的后续操作
    3. 业务数据就是用户触发业务的时候将数据存储到关系型数据库
    4. 行为:Flume FileBeat LongStash
    5. 业务:sqoop DataX Kettle
    6. CDC:canal MaxWell FlinkCDC
  5. 大数据架构

    1. 流批

      1. 实时
      2. 离线
    2. 架构

      1. Lambda

        1. Twitter工程师南森·马茨
        2. 流处理和批处理应该是分开的
        3. 公司需要有两套系统独立的系统
        4. 并不是说一个程序员既可以写流的代码还可以写批的代码
      2. Kappa

        1. Linkedln的前首席工程师杰伊·克雷普斯提出的一种架构思想
        2. 流处理和批处理使用相同的业务逻辑
        3. 公司只需要搭建一套系统即可
  • 26
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值