数据仓库的理解
什么是数仓:
数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用,这也是为什么叫“仓库”,而不叫“工厂”的原因。

基本特征:数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Support)。它出于分析性报告和决策支持目的而创建。数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrate)、稳定的(Non-Volatile)、反映历史变化的(Time Variant)数据集合,用于支持管理决策。
- 面向主题:数据仓库侧重于数据分析工作,所以数据仓库中的数据是按照一定的主题进行组织和存储。
- 集成:对原有分散的数据库数据经过系统加工、整理,消除源数据中的不一致性。
- 稳定:数据进入数据仓库以后只需要定期的加载、刷新,不需要频繁修改。
- 反映历史变化:出于决策的需要,数据仓库中的数据都要标明时间属性。通过这些数据信息,对企业的发展历程和未来趋势做出定量分析预测。
数仓与数据库对比:
数据库是存放原始数据的集合,主要存储业务流程中的事务性数据,如银行交易、订单记录等。设计时尽量避免冗余,一般针对某一业务应用进行设计,
数据仓库是数据库概念的升级,是存放加工处理后的数据集合,主要存储从数据库中整合、汇总后的数据,用于针对某些主题的历史数据进行分析,侧重决策支持。 在设计时有意引入冗余,依照分析需求,分析维度、分析指标进行设计。
OLTP与OLAP:
数据库与数据仓库的区别,实际上就是OLTP与OLAP的区别。
操作型处理,叫联机事务处理OLTP(On-Line Transaction Processing),也可以称面向交易的处理系统,它是针对具体业务在数据库联机的日常操作,通常对少数记录进行查询、修改。用户较为关心操作的响应时间、数据的安全性、完整性和并发的支持用户数等问题。传统的数据库作为数据管理的主要手段,主要用于操作型处理。
分析型处理,叫联机分析处理OLAP(On-Line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。

数据仓库分层架构:


数据仓库的数据来源于不同的源数据,并提供多样的数据应用,数据自下而上流入数据仓库后向上层开放应用,而数据仓库只是中间集成化数据管理的一个平台。
- 源数据:(ODS层)此层数据无任何更改,直接沿用外围系统数据结构和数据,不对外开放;为临时存储层,是接口数据的临时存储区域,为后一步的数据处理做准备。
- 数据仓库:(DW层)也称为细节层,DW层的数据应该是一致的、准确的、干净的数据,即对源系统数据进行了清洗后的数据
- 数据应用:(DA层)前端应用直接读取的数据源;根据报表、专题分析需求而计算生成的数据。
如何集成数据源:
数据仓库中的数据通常从多个数据源中提取,整合、汇总后成为数据仓库中的历史记录。多个数据源(内部业务数据库、外部文件、爬虫、第三方API等等)的数据存储方式不同,所以需要经过抽取、清洗、转换。 数据从数据库到数据仓库的处理过程就是ETL(Extract-Transform-Load):
- Extract:数据抽取,就是把数据从多个数据源读出来
- Transform:数据转换,就是把数据转换为统一的格式
- Load:数据加载,把处理后的数据加载到数据仓库
当数据来自不同的物理主机,这时候如使用SQL语句去处理的话,就显得比较吃力且开销也更大。
ETL是数据仓库的流水线,也可以认为是数据仓库的血液,它维系着数据仓库中数据的新陈代谢,而数据仓库日常的管理和维护工作的大部分精力就是保持ETL的正常和稳定。
ETL 实现方式通常分为三类:
-
完全依赖数据库。集成使用 Gateway、GoldenGate 、数据库 load 命令等实现。计算使用 SQL 甚至存储过程实现。流程依赖使用 Shell、存储过程或者 Java 开发依赖配置规则。
-
自研 ETL。通常会开发一套 web 页面实现多种数据源连接、SQL 编辑、流程控制、数据上传下载、参数传递、错误告警、调度等功能。
-
第三方 ETL 工具。这类工具会提供多种不同类型的组件(transform 组件、load 组件、output 组件、流程控制组件等等)和一套图形化配置界面,我们可以在图形化界面里选择合适的组件完成集成和计算,然后通过对组件的合理排布实现流程控制。我们如果想借助数据库的算力就更多的使用 SQL 脚本组件和数据集成和流程控制的功能。如果我们也想使用其计算 Transform 功能就需要给 ETL 服务器分配足够的资源且对 ETL 工具有非常深的了解以便尽可能的提高 ETL 效率和稳定性。
常用的数据仓库:
Hive是基于Hadoop的数据仓库工具,可以对存储在HDFS上的文件数据集进行查询和分析处理。Hive对外提供了类似于SQL语言的查询语言 HiveSQL,在做查询时将HiveSQL语句转换成MapReduce任务,在Hadoop层进行执行。

Teradata数据仓库配备性能最高、最可靠的大规模并行处理 (MPP) 平台,能够高速处理海量数据,其性能远远高于Hive。
数仓的发展:
完整的 ETL 主要包含三部分内容:集成、计算、流程控制。
大数据时代的 ETL 实现方式特点已经非常明显了。集成、计算和流程控制三部分各自都已经孵化出来了很好的组件。
-
数据集成同步工具:Flume、Sqoop、DataX、Canal、Waterdrop、Streamsets
-
数据计算组件:MapReduce、Tez、Spark、Flink,当然 Waterdrop 和 Streamsets 也能实现很多计算操作
-
流程控制组件:开源组件里的流程控制主要是在调度系统中实现的,比如 DolphinScheduler、airFlow、azkaban。当然对于简单的流程依赖我们也同样可以使用 Shell 或者程序实现。
-
数据库组件:Hive、Hbase、druid、Kylin、ClickHouse、Doris 等等。当然这些基本都是支持 SQL 的,这时候我们完全依赖数据库(数据库+程序/Shell/调度系统)也是不错的选择。
技术的变化:
-
大数据技术的快速发展成熟。从最初的 Mapreduce 到 Hive 再到 Spark、Flink。数据库也从 Hbase、MongoDB 发展到了 Clickhouse、Doris。性能稳定性易用性等都有很大改善。
-
开源思想的深入人心。之前 ETL 工具、数据库等都是工具产品型公司独立研发出来的,而他们需要花费巨大的人力物力,通过很长时间的迭代优化。而现在开源思想深入人心,几乎所有互联网公司都开始拥抱开源甚至二次开发,手撕源码成为大部分技术极客的标配。
参考链接:干货|你想知道的数据仓库知识,这里都有! (baidu.com)

浙公网安备 33010602011771号