数据仓库是一个集中式存储库,用于保存结构化数据(数据库表、Excel 工作表)和半结构化数据(XML 文件、网页),以便进行报告、分析和其他形式的商业智能。
?数据从各种源(如销售点系统、业务应用程序和 关系数据库)流入,通常会在到达仓库之前进行清理和标准化。由于数据仓库可以存储大量信息,因此用户可以轻松访问大量历史数据,这些数据可用于数据挖掘、数据可视化和其他形式的商业智能报告。 ??
数据库(数据湖)就是我们常用的关系型数据库(MySQL、Oracle、PostgreSQL...),还有什么非关系型数据库,它主要存放业务数据,那数据仓库有有些什么数据呢(第一点的基本概念说明了保存结构化数据和半结构化数据)?
说到他们的区别,我们一般会提到OLTP和OLAP:
OLTP:on-line transaction processing,联机事务处理,主要是业务数据,需要考虑高并发、考虑事务;
OLAP:On-Line Analytical Processing,联机分析处理,重点主要是面向分析,会产生大量的查询,一般很少涉及增删改。
数据库(数据湖) | 数据仓库 | |
---|---|---|
类型 | 结构化、半结构化、非结构化 | 结构化 |
架构 | 基于读取的架构 | 基于写入的架构 |
格式 | 原始、未筛选 | 已处理、已审核 |
源 | 大数据、IoT、社交媒体、流数据 | 应用程序、业务、事务数据、批处理报告 |
可伸缩性 | 轻松缩放,成本低 | 完成缩放很困难且成本高昂 |
用户 | 数据科学家、数据工程师 | 数据仓库专业人员、业务分析师 |
用例 | 机器学习、预测分析、实时分析 | 核心报告、BI |
他们的区别,面试时也会提到,主要从几个点谈谈就行。
?作为存储库,数据仓库和数据库都能存储和处理数据。然而,尽管它们似乎提供了相同的功能,它们各自都有自己的特定用例。
数据仓库在本质上是关系仓库。这意味着数据的结构或架构由预定义的业务和产品需求决定,这些需求针对 SQL 查询操作进行了特选、配合和优化。因此,数据仓库最适合用于存储已出于特定目的处理的数据,例如用于 BI 分析的数据挖掘,或用于查找已标识的业务用例。
与数据仓库一样,数据库(数据湖)包含结构化和半结构化数据。此外,还能够容纳来自各种非关系型源(包括移动应用、IoT 设备、社交媒体或流式传输)的原始数据和未处理的数据。这是因为数据库(数据湖)中的结构或架构在数据被读取之前并没有定义。由于数据库(数据湖)具有灵活、可缩放的性质,通常被用于执行智能形式的数据分析,例如机器学习。
可靠数据(尤其是在随着时间推移进行聚合时),可帮助用户做出更智能、更明智的决策以决定其组织运行的方式,正是数据仓库使之成为可能。数据仓库优势众多,其中一些影响最大的优势包括:
将来自多个源的数据合并到单一可靠源
存储和分析跨月份和年份的长期历史数据
清理和转换数据,使其在结构和窗体中准确、一致且标准化
减少收集数据和处理分析时的查询时间,从而提高系统整体性能
高效加载数据,而无需处理部署或基础结构的成本问题
保护数据,确保其私密、受保护且安全
准备数据以通过数据挖掘、可视化工具和其他形式的高级分析方法进行分析
数据仓库的架构取决于企业的需求。通用数据仓库架构具有以下特点:
- 简单:所有数据仓库都采用同一基本设计,将元数据、概要数据和原始数据全部存储在中央信息库中。信息库一端由数据源馈送信息,另一端则供最终用户访问,以便进行分析、报告和数据挖掘。
- 通过暂存区简化数据准备:将操作型数据置入数据仓库之前,必须首先进行清理和处理。这一步骤可通过编程方式完成,但很多数据仓库会创建一个暂存区来简化数据准备工作。
- 星型结构:通过在中央信息库和最终用户之间创建数据集市,企业可以对数据仓库进行自定义,灵活满足各种业务线的需求。换言之,准备就绪后,数据不会立即进入数据仓库,而是会被移至适当的数据集市。
- 沙盒:沙盒可提供一个专有的安全区域,帮助企业快速、非正式地探索新的数据集或新的数据分析方式,而无需遵守或遵循数据仓库的正式规则和协议。
现在说数仓,更多的会和数据平台或者基础架构搭上,已经融合到整个基础设施的搭建上。这里呢,我们不说Hadoop各种组件之间的配合,我们就简单说下数仓的分层架构。
说到数仓建模,就得提下经典的2套理论:
范式建模,Inmon提出的集线器的自上而下(EDW-DM)的数据仓库架构。
维度建模,Kimball提出的总线式的自下而上(DM-DW)的数据仓库架构。
数仓的建模或者分层,其实都是为了更好的去组织、管理、维护数据,实际开发时会整合2种方式去使用,当然,还有些其他的,像Data Vault模型、Anchor模型,暂时还没有应用过,就不说了。
维度建模,一般都会提到星型模型、雪花模型,星型模型做OLAP分析很方便。
简单点儿,直接ODS+DM就可以了,将所有数据同步过来,然后直接开发些应用层的报表,这是最简单的了;当DM层的内容多了以后,想要重用,就会再拆分一个公共层出来,变成3层架构,最近看了本阿里的书《大数据之路》,里面有很多数仓相关的内容,很不错,参考后,目前使用的分层模式如下:
按照这种分层方式,我们的开发重心就在dwd层,就是明细数据层,这里主要是一些宽表,存储的还是明细数据;到了dws层,我们就会针对不同的维度,对数据进行聚合了,按道理说,dws层算是集市层,这里一般按照主题进行划分,属于维度建模的范畴;ads就是偏应用层,各种报表的输出了。
基于这种分层方式,感觉用起来还是很方便的。
?