首页 > 其他分享 >数据仓库的学习

数据仓库的学习

时间:2024-07-03 22:55:03浏览次数:18  
标签:模型 数据仓库 业务 学习 维度 数据 事实

数据仓库的学习

1. 分层设计

数仓分层阿里整体分为了5层,分别是ODS,DWD,DIM,DWS,ADS

e6c9d24ely1h3ewiob139j20q80lsjt3.jpg

  • ODS(Operational Data Store)
    1. 面向主题的”数据运营层,也叫ODS层,是最接近数据源中数据的一层,数据源中的数据,经过抽取、洗净、传输,也就说传说中的 ETL 之后,装入本层。本层的数据,总体上大多是按照源头业务系统的分类方式而分类的。
    2. 一般来讲,为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据即可,至于数据的去噪、去重、异常值处理等过程可以放在后面的DWD层来做。
  • DWD(Data Warehouse Detail)
    1. 该层一般保持和ODS层一样的数据粒度,并且提供一定的数据质量保证。同时,为了提高数据明细层 的易用性,该层会采用一些维度退化手法,将维度退化至事实表中,减少事实表和维表的关联。
    2. 另外,在该层也会做一部分的数据聚合,将相同主题的数据汇集到一张表中,提高数据的可用性。
  • DWS(Data Warehouse Service)
    1. 又称数据集市或宽表。按照业务划分,如流量、订单、用户等,生成字段比较多的宽表,用于提供后 续的业务查询,OLAP分析,数据分发等。
    2. 一般来讲,该层的数据表会相对比较少,一张表会涵盖比较多的业务内容,由于其字段较多,因此一 般也会称该层的表为宽表。在实际计算中,如果直接从DWD或者ODS计算出宽表的统计指标,会存在计 算量太大并且维度太少的问题,因此一般的做法是,在DWM层先计算出多个小的中间表,然后再拼接成 一张DWS的宽表。由于宽和窄的界限不易界定,也可以去掉DWM这一层,只留DWS层,将所有的数据在 放在DWS亦可。
  • DIM(Dimension)
    1. 维表层主要包含两部分数据:
      1. 高基数维度数据:一般是用户维度表、商品维度表类似的维度表。数据量可能是千万级或者上亿级别。
      2. 低基数维度数据:一般是配置表,比如枚举值对应的中文含义,或者日期维表。数据量可能是个位数或者几千几万。
  • ADS(Application Data Service)
    • 数据应用层ADS(Application Data Service):存放数据产品个性化的统计指标数据。根据DWD和DWS层加工生成。

2. 事实表有那些类型

  • 事实表有三种类型:事务事实表、周期事实表和累积快照事实表

  • 事务事实表也称原子事实表,描述业务过程,跟踪控件或时间上某点的度量事件,保存的是最原子的数据

  • 周期快照事实表以一个周期为时间间隔,来记录事实,一般周期可以是每天、每周、每月、每年等

  • 累积快照事实表用来描述过程开始和结束之间的关键步骤事件,覆盖过程的整个生命周期,通常具有多个日期字段来记录关键时间点;当过程随着生命周期不断变化时,记录也会随着过程的变化而被修改

  • 三种事实表对比

    image.png

3. 数仓建模的三大范式

  • 第一范式:属性不可在分割
  • 第二范式:所有非主属性都完全依赖于主关键字
  • 第三范式:非主关键字不能依赖于其他非主关键字。即非主关键字之间不能有函数(传递)依赖关系

4. 数仓模型规范

  • 禁止逆向调用
  • 避免同层调用
  • 优先使用公共层
  • 避免跨层调用

5. 数仓中数据模型

  • 星型模型
    • 在数据仓库建模中,星型模型是维度建模中的一种选择方式。星型模型是以一个事实表和一组维度表组合而成,并且以事实表为中心,所有的维度表直接与事实表相连。

e6c9d24ely1h3f0tkm6zwj20u40k2my9.jpg

  • 雪花型模型
    • 雪花模型也是维度建模中的另一种选择,它是对星型模型的扩展,雪花模型的维度表可以拥有其他的维度表,并且维度表与维度表之间是相互关联的。因此,雪花模型相比星型模型更规范一些。但是,由于雪花模型需要关联多层的维度表,因此,性能也比星型模型要低,所以一般不是很常用。

e6c9d24ely1h3f0txvc44j20zc0pydhb.jpg

  • 星座模型
    • 维表是共享状态的,可以被多个事实表关联使用,这种模式可以看做星型模式的汇集,因而称作星系模式或者事实星座模式

6. ODS层做哪些事情

  • 保持数据原貌,不做任何修改
  • 压缩采用LZO,压缩比是100g数据压缩完10g左右
  • 创建分区表

7. DWD层做哪些事情

  • 数据清洗
    • 空值去除
    • 过滤核心字段无意义的数据,比如订单表中订单id为null,支付表中支付id为空
    • 将用户行为宽表和业务表进行数据一致性处理
  • 脱敏
    • 对手机号、身份证号等敏感数据脱敏
  • 维度退化
    • 对业务数据传过来的表进行维度退化和降维。(商品一级二级三级、省市县、年月日)
  • 压缩LZO
  • 列式存储parquet

8. 为什么要设计数据分层?

  • 清晰数据结构:每一个数据分层都有它的作用域和职责,在使用表的时候能更方便地定位和理解
  • 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算
  • 统一数据口径:通过数据分层,提供统一的数据出口,统一对外输出的数据口径
  • 复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层解决特定的问题

9. 数据仓库的定义

  • 首先,用于支持决策,面向分析型数据处理;其次,对多个异构的数据源有效集成,集成后按照主题进行重组,并包含历史数据,而且存放在数据仓库中的数据一般不再修改。

  • 数据仓库(Data Warehouse)是一个面向主题的(subject oriented)、集成的(integrated)、相对稳定的(non-volatile)、反应历史变化(time variant)的数据集合,用于支持管理决策(decision making support)。

10. 数据仓库和数据库的区别?

从目标、用途、设计来说

  • 数据库是面向事物处理的,数据是由日常的业务产生的,常更新;数据仓库是面向主题的,数据来源多样,经过一定的规则转换得到,用来分析。
  • 数据库一般用来存储当前事务性数据,如交易数据;数据仓库一般存储的历史数据。
  • 数据库的设计一般是符合三范式的,有最大的精确度和最小的冗余度,有利于数据的插入;数据仓库的设计一般不符合三范式,有利于查询

11. 事实表设计流程

  • 选择业务
    • 在明确了业务需求以后,接下来需要进行详细的需求分析,对业务的整个生命周期进行分 析,明确关键的业务步骤,从而选择与需求有关的业务过程。业务过程通常使用行为动词 表示业务执行的活动
  • 声明粒度
    • 粒度的声明是事实表建模非常重要的一步,意味着确定事实表的每一行所表示的业务含义, 粒度传递的是与事实表度量有关的细节层次。明确的粒度能确保对事实表中行的意思的理 解不会产生混淆,保证所有的事实按照同样的细节层次记录
  • 确定维度
    • 完成粒度声明以后,也就意味着确定了主键,对应的维度组合以及相关的维度字段就可以 确定了,应该选择能够描述清楚业务过程所处的环境的维度信息
  • 确定事实
    • 事实可以通过回答“过程的度量是什么”来确定。应该选择与业务过程有关的所有事实, 且事实的粒度要与所声明的事实表的粒度一致。事实有可加性、半可加性、非可加性三 种类型,需要将不可加性事实分解为可加的组件
  • 冗余维度
    • 在大数据的事实表模型设计中,考虑更多的是提高下游用户的使用效率,降低数据获取 的复杂性,减少关联的表数量。所以通常事实表中会冗余方便下游用户使用的常用维度, 以实现对事实表的过滤查询、控制聚合层次、排序数据以及定义主从关系等操作

标签:模型,数据仓库,业务,学习,维度,数据,事实
From: https://www.cnblogs.com/Act-Kang/p/18282697

相关文章

  • DataX3的学习
    阿里云开源离线同步工具DataX3.0一.DataX3.0概览DataX是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。设计理念为了解决异构数据源同步问题,DataX将复杂的网状的同......
  • 【机器学习算法基础】(基础机器学习课程)-07-朴素贝叶斯算法-笔记
    一、朴素贝叶斯算法原理        朴素贝叶斯(NaiveBayes)是一种基于贝叶斯定理的简单而强大的分类算法,尤其适用于文本分类问题,如垃圾邮件检测、情感分析等            二、朴素贝叶斯算法对新闻进行分类案例  1.数据准备假设......
  • 木舟0基础学习Java的第九天
    面向对象OOPfinal(最终的):用final修饰的所以变量名必须大写修饰类:类不能被继承修饰变量:变量就变成了常量只能被赋值一次修饰方法:方法不能被重写多态(polymorphic)多态的前提:         1.有继承关系         2.有方法重写//在多态中编......
  • Python学习笔记27:进阶篇(十六)常见标准库使用之质量控制中的代码质量与风格第一部分
    前言本文是根据python官方教程中标准库模块的介绍,自己查询资料并整理,编写代码示例做出的学习笔记。根据模块知识,一次讲解单个或者多个模块的内容。教程链接:https://docs.python.org/zh-cn/3/tutorial/index.html质量控制质量控制(QualityControl,QC),主要关注于提高......
  • Web安全基础学习:Python反序列化漏洞之pickle反序列化
    理论基础序列化与反序列化序列化和反序列化是指用于将对象或数据结构转换为字节流的过程,以便在不同系统之间进行传输或存储,并在需要时重新构造。序列化是指将对象或数据结构转换为字节流的过程。在序列化过程中,对象的状态和数据被转换为一系列字节,这些字节可以按照一定......
  • 学习笔记485—Excel技巧:一键将文本数字转换为数值
    Excel技巧:一键将文本数字转换为数值在使用Excel进行数据处理时,经常会遇到数据格式不匹配的问题。特别是当从外部导入数据或手动输入数据时,数字可能会被误识别为文本格式,这在进行数据计算和分析时会带来诸多不便。幸运的是,Excel提供了一些便捷的方法,可以帮助我们一键将文本转换为......
  • Django学习第二天
    启动项目命令pythonmanage.pyrunserver动态获取当前时间javascript实现数据动态更新代码<script>setInterval(function(){varcurrentTimeElement=document.getElementById('current-time');varcurrentTime=newDate();......
  • 力扣:151.反转字符串里的单词【2023年7月3日学习记录】
     方法一:双指针1.先使用trim()方法删除单词字符串前后空格字符。2.用两个指针指向字符串末尾单词(一个快指针,一个慢指针),快指针先向前移动,直到移动到空格字符停下来,然后截取从快指针到慢指针的单词到新开辟的字符串中。3.快指针再向前移动一位,同时将慢指针指向到快指针的位......
  • [学习笔记] 动态开点权值线段树合并 - 数据结构
    权值线段树例题【模板】普通平衡树#include<bits/stdc++.h>usingnamespacestd;constintN=1e5+1;intn,val[N],opt[N],num[N],cnt,len,san[N],m[N],rnk[N];unordered_map<int,int>dfn;structWeightedSegmentTree{ #definels(id<<1) #define......
  • 深度学习领域的名词解释:SOTA、端到端模型、泛化、RLHF、涌现 ..
    SOTA(State-of-the-Art)在深度学习领域,SOTA指的是“当前最高技术水平”或“最佳实践”。它用来形容在特定任务或领域中性能最优的模型或方法。随着研究进展,SOTA会不断被新的研究成果所超越。 非端到端模型非端到端模型指的是模型架构中包含多个分离的组件或步骤,每个......