【数据仓库】— 5分钟浅谈数据仓库(适合新手)从理论到实践

大家好,我是摇光~

对于刚进入大数据领域的萌新,且想要在数据分析岗、数据运维岗、数据工程师这些岗位立足,了解数据仓库是必要的,接下来我尽量用通俗易懂的语言让大家了解到数据仓库。


在当今大数据盛行的时代,数据仓库(Data Warehouse, 简称DW)作为企业决策支持的核心系统,扮演着举足轻重的角色。本文将深入探讨数据仓库的构建过程,介绍常用的构建工具,并通过多个实际案例来展示如何构建数据仓库。

一、数据仓库是什么?

我们都知道,现在是大数据盛行的时代,那么企业产生了这么多数据,我们该怎么利用这些数据,帮助企业做对应的决策。而数据仓库(Data Warehouse, 简称DW)就是作为企业决策支持的核心系统。

例如: 银行利用客户的存款数据和贷款数据,来分析哪些客户是重要客户,哪些业务是盈利业务,哪些银行产品可以带来最大收益。

而这些问题,可以通过数据仓库这个系统,进行数据规整后得到解决。

下面我们来具体看下比较官方的解释:

数据仓库 :是一个面向主题的集成的随时间变化的、但信息相对稳定的数据集合,它主要用于支持企业或组织的决策分析过程。
(不用着急,我给你拆分了解释)

  • 面向主题:其实就是数据仓库把数据分成各种类别,比如银行数据,可以分成客户信息、对私贷款信息、对公贷款信息、对私存款信息、对公存款信息。
  • 集成的:集成是指各大系统(比如客户信息系统、日志数据、交易系统等)的数据都放在(集成到)数据仓库,这是数据仓库的核心特点
  • 随时间变化的:时间变化是指,数据在根据业务不断的更新,比如昨天在银行有10个人开户了,今天这10个人就会出现在数据仓库系统里面。这样就记录了数据随时间的历史变化。
  • 信息相对稳定:是指数据一旦进入数据仓库,数据是不可改变的,主要以只读方式进行数据访问;比如你在银行存款,今天存500,余额剩1000,这在你的 app 是变化的,但是在数据仓库里面500是一条历史数据,1000是今天的数据。(主打一个记录数据变化,不允许你变动历史数据)

与传统数据库相比,数据仓库更注重数据的分析性、历史性和集成性,旨在为企业提供一个全面、一致的数据视图,以支持各种复杂的分析需求。

二、数据仓库与传统数据库的区别

我们了解到了数据仓库是什么,也知道了他的哪些好处,我们再来看看与传统数据库的差别。

用途

  • 传统数据库:主要用于联机事务处理(OLTP),即实时的系统交互,如银行交易、电商平台订单处理等。
  • 数据仓库:主要用于联机分析处理(OLAP),即数据的分析和报表生成。它支持对历史数据的回溯和分析,为企业的战略决策提供支持。
    (不太了解 OLTP和OLAP的,可以看一下这篇文章:【OLAP和PLTP】

使用技术

  • 传统数据库:通常使用关系型数据库,如MySQL、Oracle、SQL Server等。
  • 数据仓库:在互联网行业更多地采用大数据技术,如Hadoop等。

建模方式

  • 传统数据库:主要采用范式建模,确保数据的规范化和减少冗余。
  • 数据仓库:具有更大的灵活性,可以根据需要选择范式建模或者采用星形模型等其他建模方式。(后面我会提到数据仓库的建模模型)

存储的数据

  • 传统数据库:支持实时的增删改查操作,确保数据的一致性和完整性。
  • 数据仓库:主要提供数据的查询功能,不支持数据的增删改操作。

三、数据仓库的层级结构

数据仓库按层次来进行数据处理,每一层都有一定的意义,基本架构分为六层,可根据实际业务增减。

3.1 数据源层:

  • 数据仓库的起点,包含各种数据源,如关系数据库、文件系统、外部API、传感器数据等。 数据可以是结构化、半结构化或非结构化的。
  • 例如银行业务数据源:信贷数据库、主客户数据库、ATM数据库、核心存款数据库
  • 功能:负责收集和整合来自不同来源的数据。

3.2 数据采集/提取层(有时也称为ETL层):

  • 使用ETL(提取、转换、加载)工具将数据从数据源层提取到数据仓库中。
  • 提取过程可以是定期的(如每日、每周)或实时的,具体取决于业务需求。
  • 包括对数据的转换,以确保数据在进入仓库之前符合标准格式。
  • 需要了解 ETL 的,可以看一下这篇文章5分钟浅谈 ETL(适合新手小白)
  • 想了解 ETL工具的,可以查看这篇文章十款常用的ETL工具(适合收藏)

3.3 数据存储层:

  • 数据仓库的核心部分,负责存储经过提取和转换的数据。
  • 通常使用关系型数据库管理系统(RDBMS)或大数据存储解决方案(如Hadoop、Spark等)。
  • 数据被组织成主题模型或星型模式、雪花模式,以便于查询和分析。

3.4 数据处理层:

  • 负责对存储在数据仓库中的数据进行进一步处理,可能包括数据聚合、统计分析和数据挖掘等操作。
  • 这样做法是为了支持复杂的分析和报表生成。

3.5 数据分析层:

  • 负责对处理后的数据进行深度分析,以支持业务决策和战略规划。
  • 采用OLAP、数据挖掘、机器学习等技术,对数据进行多维度的分析和建模。
  • 设计时需要考虑数据的分析速度、分析能力以及分析结果的解释性。

3.6 数据展现/展示层:

  • 数据仓库的最终层,负责将分析结果以可视化的形式展现给用户。
  • 通常采用报表、仪表盘、数据可视化工具等方式。
  • 设计时需要考虑数据的展现效果、展现速度以及用户的交互体验。

三、构建数据仓库的步骤

我们现在来看看数据仓库的构建过程:(下面我以构建银行数据仓库为例子来讲解)

我尽量把涉及到这个系统的相关人员都会讲清他的职责,可能会有些啰嗦了~

前言:你现在是银行的数据开发工程师,现在需要和团队伙伴建设银行数据仓库。

3.1 需求收集

其实需求分析是最难的,不过这对你技术人员就不太需要关注;现在是团队中的业务分析员对接各大业务部门(比如:资产负债管理部、总行办公室、公司业务部),对每个部门提出的数据分析难点、需求进行挨个统计。

例如:资产负债管理部需要知道银行有多少存贷款的金额、利率等信息。

这一步主要是业务分析员对各大部门的业务进行需求收集;最终得到一份需求报告,主要是关于:哪些部门想要得到哪些数据,想要获取到哪些指标。

3.2 逻辑分析

这一步主要就需要项目经理,项目经理根据第一步的需求分析结果,进行数据仓库的逻辑设计,包括:确定数据仓库需要哪些主题(在第一节我已经讲过主题是什么了)、哪些维度、哪些指标、并设计数据仓库的整体框架。

3.3 数据源分析

数据源分析,就可以根据第二步得到的需求分析结果,确定数据仓库需要从哪些系统中获取数据,以及这些数据的格式、结构和质量如何。

例如:我们要从客户信息系统取个人客户信息表、对公客户信息表、客户证件信息表、客户地址信息表。

  • 并且根据上面获取的表数据,我们需要分析这些数据的格式是哪样的,质量好不好,比如有些日期数据用的字符串格式,比如有些个人客户表中的性别为空(这就是质量不好),比如有些数据在导出后乱码。反正各种问题都会存在。
  • 这一步我们可以创建建表语句

3.4 数仓建模

这是数据仓库构建的核心环节,需要选择合适的建模方法(如星型模型、雪花模型等)来设计数据仓库的结构。

先了解两个表:

  • 事实表:是指业务活动的度量,比如银行的存款金额、贷款金额、利率、利息等度量信息
  • 维度表:是指业务的各种维度信息,如客户信息表、存款产品表、贷款产品表、部门表等

接下来我介绍一下数仓的几种常见模型:

1、星型模型

  • 结构:以一个或多个事实表为中心,这些表记录了业务活动的度量值,如销售额、订单数量等。围绕事实表的是多个维度表,这些表提供上下文信息,如时间、地点、产品等。
  • 优点:结构简单明了,易于理解和查询;查询效率高,因为所有维度表都直接与事实表相连,查询时只需要一次连接操作;维护简单。
  • 缺点:当数据量非常大时,可能会遇到性能瓶颈;由于缺乏规范化,数据冗余问题可能会比较严重。
  • 适合场景: 适用于大多数商业智能应用,特别是那些需要快速响应查询的场景。例如,在零售行业中,星型模型可以帮助快速分析销售数据,以便企业及时调整销售策略。

2、雪花模型

  • 结构:雪花模型是星型模型的扩展,其特点是维度表被进一步规范化。也就是说,维度表可能会被拆分成多个相关的子表,以消除数据冗余。
  • 优点:数据存储更加紧凑,减少了冗余数据;提高了数据的一致性和完整性;在进行数据更新和维护时更加方便,因为每个维度表都是独立的,可以单独进行更新。
  • 缺点:查询性能可能较低,特别是在进行复杂查询时,需要进行多次连接操作,增加了查询的复杂性和时间成本。
  • 适合场景:适用于数据结构复杂、数据量大的场景,特别是那些对数据一致性要求较高、查询频率较低的场景。例如,在银行业中,客户信息和交易记录需要高度一致和规范化,雪花模型就显得尤为适用。

3、星座模型

  • 结构:也称为事实星座,是一种复杂的数据仓库设计模式,允许多个相关的事实表共享维度表。
  • 优点:灵活性高,能够支持复杂的业务分析需求;数据集成度高,因为多个事实表共享相同的维度表。
  • 缺点:结构复杂,设计和维护成本较高;查询性能可能不如星型模型和雪花模型。
  • 适合场景:适用于需要同时分析多个业务过程的场景,特别是那些需要多个度量标准的复杂业务需求。例如,在一个大型制造企业中,生产过程和销售过程需要同时进行分析,这时星座模型就能够提供有效的支持。

通过这一步,我们可以将数据仓库的事实表、维度表等表的表结构确定了,然后创建各个表的建表语句,并确定哪些表由哪些源表才能构建出来。

比如你想要整个银行的客户信息,所以你需要将对公客户信息表、对私客户信息表关联起来,才能获得全部客户信息。

3.5 ETL处理(抽取、转换、加载)

ETL也是数据仓库的核心,ETL分别代表 抽取、转换、加载。

ETL过程通常通过ETL工具或脚本实现,这些工具提供了图形化界面或编程语言接口,方便用户定义和执行ETL任务。

  • 一些常见的ETL工具包括Apache NiFi、Talend、Pentaho Data Integration(PDI)、Informatica等。

我们来看看这三个具体是干什么事情?

Extract(抽取)

  • 这一步骤的目的是从各种数据源(如关系型数据库、NoSQL数据库、日志文件、API等)中捕获和提取数据。

  • 数据源可能分散在不同的位置,格式也可能各不相同。

  • 因此,抽取过程需要解决数据的访问和读取问题,确保数据的完整性和准确性。
    Transform(转换):

  • 在数据被提取后,经常需要进行一系列的转换操作,以满足数据仓库的存储和分析需求。

  • 这些转换可能包括数据类型转换、数据清洗(去除重复数据、处理缺失值等)、数据拆分或合并、数据聚合等。就像我刚刚举的例子(有些个人客户表中的性别为空,个人客户和对公客户需要合并)

  • 转换过程的目标是将原始数据转换为结构化和标准化的格式,以提高数据的质量和可用性。

  • Load(加载)

  • 加载步骤是将转换后的数据加载到目标数据仓库中。

  • 这通常涉及将数据写入到数据库表或其他存储结构中。

  • 加载过程需要考虑数据的存储效率、索引的创建以及数据的分区策略等,以确保数据仓库的性能和可扩展性。

这一步其实简单来说,就是将各种源表加载到刚刚所说的模型中的表里面。

3.6 数据访问与应用开发

数据访问与应用开发是数据仓库的终极目标,是为了实现数据的利用和价值的最大化。

数据访问主要包括数据查询、数据分析和数据展示,通过数据访问工具和方法,用户可以方便地获取和使用数据仓库中的数据,现在基本都是进行可视化的展示。

想了解可视化的工具可以看一下这篇文章:23款数据可视化工具

以上就是构建数据仓库的整个步骤。

四、案例详解

案例:滴滴顺风车实时数仓构建

背景介绍:

滴滴顺风车业务需要实时地监控和分析订单数据,以支持业务决策和运营优化。为了满足这一需求,滴滴数据团队决定构建一个实时数仓。

数仓架构:

滴滴顺风车实时数仓的架构包括ODS层、DWD层、DIM层和DWM层等关键层次。其中:

  • ODS层:作为贴源层,存储从各种数据源采集的原始数据,包括订单相关的binlog日志、冒泡和安全相关的public日志、流量相关的埋点日志等。
  • DWD层:即明细数据层,对ODS层的数据进行清洗和转换,生成可用于后续分析的明细数据。
  • DIM层:公共维度层,存储各种维度信息,如城市、渠道等,用于在后续分析中与明细数据进行关联。
  • DWM层:汇总数据层,根据业务需求对明细数据进行汇总和计算,生成各种汇总指标。

数据获取与整合:

在数据获取与整合阶段,滴滴数据团队利用Kafka、Flink等工具实现了数据的实时采集和传输。同时,通过可以编写ETL脚本对原始数据进行清洗和转换,确保数据的一致性和可靠性。

应用分析与报表展现:

在数据应用分析和报表展现阶段,滴滴数据团队利用Tableau等工具实现了对实时数仓中数据的可视化分析。通过构建各种图表和仪表盘,将分析结果直观地呈现给决策者,支持业务决策和运营优化。

相关推荐
梦仔生信进阶22 分钟前
基于R计算皮尔逊相关系数
前端·数据库·r语言
阿乾之铭1 小时前
Mysql数据库索引
数据库·mysql
孤寒者3 小时前
MYSQL8创建新用户报错:You have an error in your SQL syntax;check...
数据库·sql·mysql·创建新用户操作
c_weith3 小时前
自动生成数据:SQLark 让数据测试更高效
数据库·性能测试·数据生成·sqlark
隔壁老登3 小时前
sql报错非法的字符校对Illegal mix of collations
数据库·sql
非凡的世界4 小时前
PostgreSQL 超级管理员详解
数据库·postgresql
非凡的世界4 小时前
linux命令行连接Postgresql常用命令
linux·数据库·postgresql
说私域4 小时前
社群团购项目运营策略的深度剖析:融合链动2+1模式、AI智能名片与S2B2C商城小程序的综合应用
大数据·人工智能·小程序
Dnelic-5 小时前
Kotlin | Android Provider 的实现案例
android·数据库·kotlin·provider·自学笔记