肥东住房和城乡建设部网站,人力资源公司代缴社保合法吗,聊城网站策划,漳州做网站的公司文章目录#xff08;一#xff09;什么是数据仓库#xff08;二#xff09;数据仓库基础知识#xff08;三#xff09;数据仓库建模方式#xff08;1#xff09;星行模型#xff08;2#xff09;雪花模型#xff08;3#xff09;星型模型 VS 雪花模型#xff08;四…
文章目录一什么是数据仓库二数据仓库基础知识三数据仓库建模方式1星行模型2雪花模型3星型模型 VS 雪花模型四数据仓库分层1为什么要分层2数据仓库分层设计3DWD数据清洗原则4数据仓库命名规范5典型的数据仓库系统架构五项目需求分析一什么是数据仓库
我们前面学习过Hive说Hive其实就是一个数据仓库可以这样理解就是把Hive认为是一种技术通过Hive这种技术可以实现数据仓库的建设。
数据仓库(Data Warehouse)是一个面向主题的、集成的、稳定的且随时间变化的数据集合用于支持管理人员的决策
面向主题 主题就是类型的意思。 传统数据库主要是为应用程序进行数据处理未必会按照同一主题存储数据 数据仓库侧重于数据分析工作是按照主题存储的。 这一点类似于传统农贸市场与超市的区别市场里面针对一个商贩他卖的萝卜、白菜这些蔬菜以及水果会在一个摊位上、 而超市里蔬菜和水果是分开的并且在蔬菜里面也会进行分类不同类型的蔬菜放到不同的地方。也就是说农贸市场里的菜(数据)是按照商贩(应用程序)去归类(存储)的而超市里面则是按照蔬菜、水果的类型(同主题)归类的。集成 传统数据库通常与某些特定的应用相关数据库之间相互独立。而数据仓库中的数据是在对原有分散的数据库数据抽取、清理的基础上经过系统加工、汇总和整理得到的必须消除源数据中的不一致性以保证数据仓库内的信息是关于整个企业的一致的全局信息。稳定 稳定说的是相对稳定 传统数据库中的数据通常实时更新数据根据需要及时发生变化。数据仓库的数据主要供企业决策分析使用所涉及的数据操作主要是数据查询一旦某个数据进入数据仓库以后一般情况下将被长期保留也就是数据仓库中一般有大量的查询操作但修改和删除操作很少通常只需要定期的加载、刷新。变化 这里的变化说的是反映历史变化传统数据库主要关心当前某一个时间段内的数据而数据仓库中的数据通常包含历史信息它里面记录了企业从过去某一时间点(如开始应用数据仓库的时间)到目前的各个阶段的信息通过这些信息可以对企业的发展历程和未来趋势做出分析和预测。
企业数据仓库的建设是以现有企业业务系统和大量业务数据的积累为基础。数据仓库不是静态的概念只有把信息及时交给需要这些信息的使用者供他们做出改善其业务经营的决策信息才能发挥作用信息才有意义。而把信息加以整理归纳和重组并及时提供给相应的管理决策人员是数据仓库的根本任务。
二数据仓库基础知识
1事实表、维度表 事实表是指保存了大量业务数据的表或者说保存了一些真实的行为数据的表 例如销售商品所产生的订单数据
什么是维度表呢 维度其实指的就是一个对象的属性或者特征例如时间维度地理区域维度年龄维度 这是维度的概念。 维度表里面存放的其实就是刚才我们所说的那些维度相关的信息。 2数据库三范式 其实严格意义上来说关系型数据库的范式是有多种的 第一范式(1NF) 第二范式(2NF) 第三范式(3NF) 巴斯-科德范式(BCNF) 第四范式(4NF) 第五范式(5NF)
首先看第一范式(1NF): 它的意思是说数据库表的每一列都是不可分割的原子数据项。第二范式(2NF)表示在1NF的基础上数据库表中每一列都和主键相关不能只和主键的某一部分相关(针 对联合主键而言) 也就是说一个表中只能保存一种类型的数据不可以把多种类型数据保存在同一张表中第三范式(3NF): 要求一个数据库表中不包含已在其它表中包含的非主键字段 就是说表中的某些字段信息如果能够被推导出来就不应该单独的设计一个字段来存放(能尽量外键 join就用外键join)。 很多时候我们为了满足第三范式往往会把一张表拆分成多张表
3维度建模模型雪花模型、星型模型
三数据仓库建模方式
数据仓库建模可以使用多种方式 1ER实体模型这种模型其实就是满足数据库第三范式的模型这就是刚才我们为什么要分析数据库中的三范式了。 ER模型是数据库设计的理论基础当前几乎所有的OLTP系统设计都采用ER模型建模的方式 Bill Inom提出的数仓理论推荐采用ER关系模型进行建模不过这种方式在实际工作中不推荐使用。 2维度建模模型 Ralph Kimball提出的数仓理论中提出了维度建模将数据仓库中的表划分为事实表和维度表。 基于事实表和维度表进行维度建模。 维度建模通常又分为星型模型和雪花模型。 维度建模是我们在构建数据仓库中常用的方式。 3Data Vault模型 Data Vault是在ER模型的基础上衍生而来模型设计的初衷是有效的组织基础数据层使之易扩展、灵活 的应对业务的变化同时强调历史性、可追溯性和原子性不要求对数据进行过度的一致性处理并非针对分析场景所设计。 4Anchor模型 Anchor是对Data Vault模型做了更近一步的规范化处理初衷是为了设计高度可扩展的模型核心思想是所有的扩张只添加而不修改于是设计出的模型基本变成了k-v结构的模型。 Data Vault模型和Anchor模型这两种模型大家知道就行了很少使用。
维度建模模型
1星行模型
星型模型和雪花模型主要区别就是对维度表的拆分 对于雪花模型维度表的设计更加规范一般符合3NF 而星型模型一般采用降维的操作利用冗余来避免模型过于复杂提高易用性和分析效率。 这里面的中间的订单表是事实表外面的四个是维度表。 这几个维度表其实严格意义上来说只能满足第二范式是不满足第三范式的。 但是这样的好处是查询效率比较高在查询的时候不需要关联很多张表。 缺点就是数据有冗余。
2雪花模型 这个里面订单表是一个事实表其余的都是维度表。 针对商品维度表外层又拆分出来了一个商品类目的维度表这样拆分之后其实就满足第三范式了但是这 样就变的复杂了后期在获取商品维度数据的时候还需要关联这个商品类目维度表。
3星型模型 VS 雪花模型
冗余雪花模型符合业务逻辑设计采用3NF设计有效降低数据冗余星型模型的维度表设计不符合3NF反规范化维度表之间不会直接相关牺牲部分存储空间性能雪花模型由于存在维度间的关联采用3NF降低冗余通常在使用过程中需要连接更多的维度表导致性能偏低星型模型违反三范式采用降维的操作将维度整合以存储空间为代价有效降低维度表连接数性能比雪花模型高
在实际工作中我们多采用星型模型因为数据仓库主要是侧重于做数据分析对数据的查询性能要求比较 高所以星型模型是比较好的选择在实际工工作中我们会尽可能的多构建一些宽表提前把多种有关联 的维度整合到一张表中后期使用时就不需要多表关联了比较方便并且性能也高。
四数据仓库分层
1为什么要分层
清晰的数据结构每一个分层的数据都有它的作用域这样我们在使用表的时候能更方便地定位和理 解。数据血缘追踪简单来讲可以这样理解我们最终给业务方呈现的是一个能直接使用的业务表但是它的来源有很多如果有一张来源表出问题了我们希望能够快速准确地定位到问题并清楚它的危害范围分层之后就很好定位问题以及可以清晰的知道它的危害范围。减少重复开发规范数据分层开发一些通用的中间层数据能够减少重复计算。把复杂问题简单化将一个复杂的任务分解成多个步骤来完成每一层只处理单一的步骤比较简单和容易理解。而且便于维护数据的准确性 当数据出现问题之后可以不用修复所有的数据只需要从有问题的步骤开始修复。
2数据仓库分层设计
数据仓库一般会分为4层
ODS层原始数据层数据源中的数据采集过来之后原样保存。DWD层明细数据层这一层是对ODS层的数据进行清洗解决一些数据质量问题和数据的完整度 问题。DWS层这一层是对DWD层的数据进行轻度聚合汇总生成一系列的中间表提升公共指标的复用 性减少重复加工并且构建出来一些宽表用于提供后续的业务查询。APP层根据业务需要由前面三层的数据统计而出的结果可以直接提供查询展现一般会把APP 层的数据导出到MySQL中供线上系统使用提供报表展示、数据监控及其它功能。也有公司把这层 称为DM层。虽然名字不一样但是性质是一样的。 3DWD数据清洗原则
数据唯一性校验(通过数据采集工具采集的数据会存在重复的可能性)数据完整性校验(采集的数据中可能会出现缺失字段的情况针对缺失字段的数据建议直接丢掉如 果可以确定是哪一列缺失也可以进行补全可以用同一列上的前一个数据来填补或者同一列上的后一 个数据来填补)数据合法性校验-1(针对数字列中出现了null、或者-之类的异常值全部替换为一个特殊值例如0或 者-1这个需要根据具体的业务场景而定)数据合法性校验-2(针对部分字段需要校验数据的合法性例如用户的年龄不能是负数)
4数据仓库命名规范
针对数据仓库的每一层都在Hive中创建一个数据库数据库的命名包含每一层的标识符。 例如针对ODS层可以在Hive中创建数据库 ods_mall把同一层的表都放到一个数据库里面方便管理针对每一层中的表名在创建的时候可以使用每一层的标识符开头。 例如针对ODS层创建的表名为ods_user这样方便后期使用只要看到表名就可以知道这个表示哪一层的了。针对一些临时表我们可以在对应的分层中创建表名的时候以_tmp结尾。针对一些备份的表可以在表名后面添加_bak。
5典型的数据仓库系统架构
典型的企业数据仓库系统通常包含数据源、数据存储与管理、数据的访问三个部分
五项目需求分析
想要开发一个完整的数据仓库系统至少需要以下这几个功能模块。 1数据采集平台这个模块主要负责采集各种数据源的数据 2数据仓库这个模块负责数据存储和管理 3数据报表这个模块其实就是数据可视化展示了 通过这三个模块可以实现数据采集构建数据仓库最后基于数据仓库中的数据实现上层应用体现数据仓库的价值。