热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数仓理论建模

数仓理论建模数据仓库数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合数仓的使用结构复杂业务数据库通常是根据业务操作的需要进行设计的,遵循3NF范
数仓理论建模

数据仓库

数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合

数仓的使用


  1. 结构复杂

    业务数据库通常是根据业务操作的需要进行设计的,遵循3NF范式,尽可能减少数据冗余。这就造成表与表之间关系错综复杂。在分析业务状况时,储存业务数据的表,与储存想要分析的角度表,很可能不会直接关联,而是需要通过多层关联来达到,这为分析增加了很大的复杂度。
    举例:想要从门店的地域分布来分析用户还款情况。基本的还款数据在订单细节表里,各种杂项信息在订单表里,门店信息在门店表里,地域信息在地域表里,这就意味着我们需要把这四张表关联起来,才能按门店地域来分析用户的还款情况。
    此外,随着NoSQL数据库的进一步发展,有许多数据储存在诸如MongoDB等NoSQL数据库中,另外一些通用信息,如节假日等,通常也不会在数据库中有记录,而是以文本文件的形式储存。多种多样的数据储存方式,也给取数带来了困难,没法简单地用一条SQL完成数据查询。如果能把这些数据都整合到一个数据库里,比如构造一张节假日表。这样就能很方便地完成数据查询,从而提高分析效率。

  2. 数据脏乱

    因为业务数据库会接受大量用户的输入,如果业务系统没有做好足够的数据校验,就会产生一些错误数据,比如不合法的身份证号,或者不应存在的Null值,空字符串等。

  3. 理解困难

    业务数据库中存在大量语义不明的操作代码,比如各种状态的代码,地理位置的代码等等,在不同业务中的同一名词可能还有不同的叫法。

    这些情况都是为了方便业务操作和开发而出现的,但却给我们分析数据造成了很大负担。各种操作代码必须要查阅文档,如果操作代码较多,还需要了解储存它的表。来自不同业务数据源的同义异名的数据更是需要翻阅多份文档。

  4. 缺少历史

    出于节约空间的考虑,业务数据库通常不会记录状态流变历史,这就使得某些基于流变历史的分析无法进行。比如想要分析从用户申请到最终放款整个过程中,各个环节的速度和转化率,没有流变历史就很难完成。

  5. 大规模查询缓慢

    当业务数据量较大时,查询就会变得缓慢。尤其需要同时关联好几张大表,比如还款表关联订单表再关联用户表,这个体量就非常巨大,查询速度非常慢。美好的青春都浪费在了等待查询结果上,真是令人叹息。

    主题

    面向主题

    主题(Subject)

    将企业信息系统中的数据进行综合、归类和分析利用的一个抽象概念
    每一个主题基本对应一个宏观的分析领域
    例如“销售分析”就是一个分析领域,那么这个数据仓库应用的主题就是“销售分析”

    提取主题

    采购子系统:
    订单(订单号,供应商号,总金额,日期)
    订单细则(订单号,商品号,类别,单价,数量)
    供应商(供应商号,供应商名,地址,电话)销售子系统:
    顾客(顾客号,姓名,性别,年龄,文化程度,地址,电话)
    销售(员工号,顾客号,商品号,数量,单价,日期)库存管理子系统:
    领料单(领料单号,领料人,商品号,数量,日期)
    进料单(进料单号,订单号,进料人,收料人,日期)
    库存(商品号,库房号,库存量,日期)
    库房(库房号,仓库管理员,地点,库存商品描述)人事管理子系统:
    员工(员工号,姓名,性别,年龄,文化程度,部门号)
    部门(部门号,部门名称,部门主管,电话)主题一:顾客
    固有信息:顾客号,姓名,性别,年龄,文化程度,地址,电话
    购物信息:顾客号,商品号,单价,数量,金额,日期,...主题二:供应商
    固有信息:供应商号,供应商名,地址,电话
    供应商品信息:订单号,供应商号,总金额,日期
    主题三:商品
    固有信息:商品号,商品名,类别,颜色,尺寸,型号
    采购信息:商品号,供应商号,日期,采购价格,采购量
    库存信息:商品号,库房号,库存量,日期
    销售信息:顾客号,商品号,数量,单价,日期
    主题四:订单
    固有信息:订单号,员工号,顾客号,商品号,数量,单价,日期员工信息:员工号,姓名,性别,年龄,文化程度,部门号
    顾客信息:顾客号,姓名,性别,年龄,文化程度,地址,电话
    商品信息:商品号,商品名,类别,颜色,尺寸,型号


集成

集成性是指数据仓库中数据必须是一致的

  1. 数据仓库的数据是从原有的分散的多个数据库、数据文件和数据段中抽取来的
  2. 数据来源可能既有内部数据又有外部数据
    例如F/M,0/1,A/B

集成方法:统一(消除不一致),综合(对原有数据进行综合和计算)

非易失(非人为因素)

数据仓库中的数据是经过抽取而形成的分析型数据

  • 不具有原始性
  • 主要供企业决策分析之用
  • 执行的主要是‘查询’操作,一般情况下不执行‘更新’操作
  • 一个稳定的数据环境也有利于数据分析操作和决策的制订

随时间变化(人为删除)

数据仓库以维的形式对数据进行组织,时间维是数据仓库中很重要的一个维度

  • 不断增加新的数据内容
  • 不断删去旧的数据内容
  • 更新与时间有关的综合数据

数据仓库和数据库的区别


  • 数据库是为捕获和存储数据而设计
  • 数据仓库是为分析数据而设计

** **数据库数据仓库
本质数据的集合数据的集合
定位事务处理OLTP数据分析OLAP
面向群体前端用户管理人员
操作增删改查查询
数据粒度事件记录维度
数据粒度事件记录维度

OLTP和OLAP的区别


  • On-Line Transaction Processing 联机事务处理OLTP
  • OLTP是传统的关系型数据库的主要应用

对比属性OLTPOLAP
读特性每次查询只返回少量记录对大量记录进行汇总
写特性随机、低延时写入用户的输入批量导入
使用场景用户,Java EE项目内部分析师,为决策提供支持
数据表征最新数据状态随时间变化的历史状态
数据规模GBTB到PB

数据仓库的架构


Inmon架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GDMJy5si-1614597871664)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210301095333013.png)]

Kimball架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-INhRqmwp-1614597871665)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210301095433914.png)]

混合型架构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YstfHoOM-1614597871666)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210301095510155.png)]

数据仓库的解决方案


  • 数据采集
    Flume,Sqoop,Logstash,Datax

    数据ETL(清洗)

    • 抽取(Extract)
      从操作型数据源获取数据

    • 转换(Transform)
      转换数据,使之转变为适用于查询和分析的形式和结构

    • 装载(Load)
      将转换后的数据导入到最终的目标数据仓库

    • 工具

      Oracle:OWB和ODI
      微软:SQL Server Integration Services
      SAP:Data Integrator
      IBM:InfoSphere DataStage、Informatica
      Pentaho:Kettle

  • 数据存储
    MySQL,HDFS,HBase,Redis,MongoDB

  • 数据计算
    Hive,Tez,Spark,Flink,Storm

  • 数据可视化
    Tableau,Echarts,Superset,QuickBI,DataV

  • 任务调度
    Oozie,Azkaban,Crontab

    数据转换
    1.统一数据编码: 比如性别字段, 有些是1和0, 有些使用"F"和"M表示", 我们需要给他统一一下
    2.预计算: 比如订单信息表里有"订单号, 员工号,顾客号,商品号,数量,单价,日期", 这里我们就可以将"数量×单价", 提前做好计算
    3.重新排序: 提高查询性能
    4.去重: 数据可能会有一些重复的, 会影响到后续的分析, 所以我们需要根据实际情况进行去重
    5.行列转置: lateral view explode


数据仓库的建模


数据仓库模型构建


选择业务流程


  1. 确认哪些业务处理流程是数据仓库应该覆盖的
    例如:了解和分析一个零售店的销售情况
  2. 记录方式
    • 使用纯文本
    • 使用业务流程建模标注(BPMN)方法
    • 使用同一建模语言(UML)

声明粒度


  1. 用于确定事实中表示的是什么
    例如:一个零售店的顾客在购物小票上的一个购买条目
  2. 选择维度和事实前必须声明粒度
  3. 建议从原始粒度数据开始设计
    原始记录能够满足无法预期的用户查询
  4. 不同的事实可以有不同的粒度

确认维度


  1. 说明了事实表的数据是从哪里采集来的
  2. 典型的维度都是名词
    例如:日期、商店、库存等
  3. 维度表存储了某一维度的所有相关数据
    例如:日期维度应该包括年、季度、月、周、日等数据

确认事实


  1. 识别数字化的度量,构成事实表的记录
  2. 和系统的业务用户密切相关
  3. 大部分事实表的度量都是数字类型的
    • 可累加,可计算
    • 例如:成本、数量、金额

星型模型

中间一张事实表,周围一圈维度表构成

优点
简化查询
简化业务报表逻辑
获得查询性能
快速聚合
便于向立方体提供数据
缺点
不能保证数据完整性
对于分析需求来说不够灵活

雪花模型

中间一张事实表,周围多层维度表构成

优点
一些OLAP多维数据库建模工具专为雪花模型进行了优化
规范化的维度属性节省存储空间
缺点
维度属性规范化增加了查询的连接操作和复杂度
不确保数据完整性

星座表

两张事实表通过一张维度表关联


推荐阅读
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 提升MySQL数据库架构性能的策略与方法
    为了提升MySQL数据库架构的性能,本文探讨了多种策略与方法。首先,分析了影响数据库性能的关键因素,并详细阐述了数据库结构优化的重要性。接着,介绍了数据库设计的基本步骤,包括第一、第二和第三范式的应用,以及反范式化设计的场景。此外,还讨论了数据库物理设计的关键要素,如表定义、索引设计和存储引擎选择,以确保高效的查询响应和数据管理。 ... [详细]
  • 1.关系型数据库永久性保存数据的仓库php的变量只是php脚本执行期间,临时性保存变量的空间【使用内存空间临时保存】关系型数据库:利用二者的关系来描述实体的信息。【利用二维表字段名 ... [详细]
  • 本文深入解析了通过JDBC实现ActiveMQ消息持久化的机制。JDBC能够将消息可靠地存储在多种关系型数据库中,如MySQL、SQL Server、Oracle和DB2等。采用JDBC持久化方式时,数据库会自动生成三个关键表:`activemq_msgs`、`activemq_lock`和`activemq_ACKS`,分别用于存储消息数据、锁定信息和确认状态。这种机制不仅提高了消息的可靠性,还增强了系统的可扩展性和容错能力。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • 本文深入解析了Spring Cloud路由网关Zuul的核心功能及其典型应用场景。通过对方志朋老师教材的学习和实践,详细探讨了Zuul在微服务架构中的重要作用,包括请求路由、过滤器链管理以及服务动态扩展等关键特性。同时,结合实际案例,展示了Zuul在高并发和复杂业务场景下的应用优势,为读者提供了全面的技术参考。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • 「驭龙」开源主机入侵检测系统了解一下
    「驭龙」开源主机入侵检测系统了解一下 ... [详细]
author-avatar
愁撒_651
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有