系列文章目录
数据仓库设计
- 何为数仓
- 主要特点
2.1 面向主题
2.2 集成
2.3 相对稳定
2.4 反映历史变化 - 数仓分层
3.1 数仓分层的优点
3.2 分层的方式
3.2.1 数据运营层 ODS
3.2.2 数据仓库层 DW
3.2.3 数据应用层 ADS
3.3 数据集市 - 主题划分
4.1 概念
4.1.1 主题
4.1.2 主题域
4.2 主题域划分
文章目录
前言
本文为Flink-业务开发章节前篇:数据仓库设计详解
后续章节:Flink实战车联网项目数仓设计
数据仓库设计
1. 何为数仓
(1) 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(Time Variant)的数据集合;
(2) 数据仓库通常指一个数据库环境,而不是一件产品,它提供用户用于决策支持的当前的和历史的数据,它是一整套包括了etl、调度、建模在内的完整的体系;
(3) 数据仓库建设的目的,是为前端查询和分析提供数据基础,主要应用于OLAP(on-line Analytical Processing),支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
2. 主要特点
2.1 面向主题
操作型数据库中的数据针对事务处理任务,各个业务系统之间彼此分离,而数据仓库中的数据按照一定的主题域进行组织。
主题是个抽象概念,指用户使用数据仓库进行决策时所关心的重点领域,如顾客/供应商/产品等。
一个主题通常与多个操作型数据库相关。
2.2 集成
操作型数据库通常与某些特定的应用相关,数据库之间相互独立,且往往是异构的。
而数据仓库中的数据是在原有分散的数据库数据作抽取、清理的基础上经过系统加工、汇总和整理得到的,因此必须消除源数据中的不一致性,以保证数据仓库内的信息是关于整个企事业单位一致的全局信息。
即存放在数据仓库中的数据应使用一致的命名规则、格式、编码结构和相关特性来定义。
2.3 相对稳定
操作型数据库中的数据通常实时更新,数据根据需要及时发生变化。
数据仓库中的数据主要用作决策分析,涉及的数据操作主要是查询和定期更新,一旦某个数据加载到数据仓库以后,一般情况下将作为数据档案长期保存,几乎不再做修改和删除操作。
即数据仓库中通常有大量的查询操作及少量定期的更新操作。
2.4 反映历史变化
操作型数据库主要关心当前某一时间段内的数据,而数据仓库中的数据通常包含较久远的历史数据。因此数仓中通常包括一个时间维,以便研究趋势和变化。
数仓系统通常记录了一个单位从过去某一时期到目前的所有时期的信息,通过这些信息,可以对单位的发展历程和未来趋势作出定量分析和预测。
3. 数仓分层
3.1 数仓分层的优点
- 划清层次结构:每一个数据分层都有它的作用域,这样在使用表的时候能更方便地定位和理解。
- 数据血缘追踪:简单来讲可以这样理解,数仓最终给下游是直接能使用的业务表,但是它的来源有很多,如果有一张来源表出问题了,开发者希望能够快速准确地定位到问题,并清楚它的危害范围。
- 减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。
- 把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。
- 屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据。
3.2 分层的方式
每个公司的业务都可以根据自己的业务需求分层不同的层次;目前比较成熟的数据分层:数据运营层 ODS、数据仓库层 DW、数据服务层 ADS。
3.2.1 数据运营层 ODS
数据运营层:Operation Data Store 数据准备区,也称为贴源层。数据源中的数据,经过抽取、洗净、传输,也就是ETL过程之后进入本层。
该层的主要功能:
1) ODS是后面数据仓库层的准备区
2) 为DWD层提供原始数据
3) 减少对业务系统的影响
在源数据装入这一层时,要进行诸如去噪(例如有一条数据中人的年龄是 300 岁,这种属于异常数据,就需要提前做一些处理)、去重(例如在个人资料表中,同一 ID 却有两条重复数据,在接入的时候需要做一步去重)、字段命名规范等一系列操作。
但是为了考虑后续可能需要追溯数据问题,因此对于这一层就不建议做过多的数据清洗工作,原封不动地接入原始数据也可以,根据业务具体分层的需求来做。这层的数据是后续数据仓库加工数据的来源。
3.2.2 数据仓库层 DW
数据仓库层从上到下,又可以分为3个层:数据细节层 DWD、数据中间层 DWM、数据服务层 DWS。
数据细节层 DWD
data warehouse details,DWD (数据清洗/DWI),该层是业务层和数据仓库的隔离层,保持和 ODS 层一样的数据颗粒度;主要是对 ODS 数据层做一些数据的清洗和规范化的操作,比如去除空数据、脏数据、离群值等。为了提高数据明细层的易用性,该层通常会才采用一些维度退化方法,将维度退化至事实表中,减少事实表和维表的关联。
数据服务层 DWS
Data Warehouse Service,DWS(宽表-用户行为,轻度聚合)该层是基于 DWD 上的基础数据,对数据做一些轻微的聚合操作,整合汇总成分析某一个主题域的数据服务层,一般是宽表,用于提供后续的业务查询,OLAP分析,数据分发等。一般来说,该层的数据表会相对较少;一张表会涵盖比较多的业务内容,由于其字段较多,因此一般也会称该层的表为宽表。
3.2.3 数据应用层 ADS
Application Data Service,ADS(APP/DAL/DF) 出报表结果。该层主要是提供给数据产品和数据分析使用的数据,一般会存放在 ES、Redis、PostgreSql 等系统中供线上系统使用;也可能存放在 hive 或者 Druid 中,供数据分析和数据挖掘使用,比如常用的数据报表就是存在这里的。
3.3 数据集市
狭义上指 ADS 层;广义上指 Hadoop 从 DWD DWS ADS 同步到 RDS 的数据形成的数据集市(Data Mart),也叫数据市场,数据集市就是满足特定的部门或者用户的需求,按照多维的方式进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据立方体。
区别数据仓库
数据集市就是企业级数据仓库的一个子集,它主要面向部门级业务,并且只面向某个特定的主题。为了解决灵活性与性能之间的矛盾,数据集市就是数据仓库体系结构中增加的一种小型的部门或工作组级别的数据仓库。数据集市存储为特定用户预先计算好的数据,从而满足用户对性能的需求。数据集市可以在一定程度上缓解访问数据仓库的瓶颈。
理论上讲,应该有一个总的数据仓库的概念,然后才有数据集市。实际建设数据集市的时候,国内很少这么做。国内一般会先从数据集市入手,就某一个特定的主题(比如企业的客户信息)先做数据集市,再建设数据仓库。数据仓库和数据集市建立的先后次序之分,是和设计方法紧密相关的。而数据仓库作为工程学科,并没有对错之分。
在数据结构上,数据仓库是面向主题的、集成的数据的集合。而数据集市通常被定义为星型结构或者雪花型数据结构,数据集市一般是由一张事实表和几张维表组成的。
数据粒度方面,数据仓库通常包括粒度较细的数据明细,数据集市则会在数据仓库的基础上进行数据聚合,这些聚合后的数据就会直接用于部门业务分析。
4. 主题划分
4.1 概念
4.1.1 主题
主题是在较高层次上将企业信息系统中的数据综合、归类并进行分析利用的抽象。它是与传统数据库的面向应用相对应的,是一个抽象概念,每一个主题对应一个宏观的分析领域。在逻辑意义上,它是对应企业中某一宏观分析领域所涉及的分析对象。
面向主题的数据组织方式,就是在较高层次上对分析对象数据的一个完整并且一致的描述,能刻画各个分析对象所涉及的企业各项数据,以及数据之间的联系。所谓较高层次是相对面向应用的数据组织方式而言的,是指按照主题进行数据组织的方式具有更高的数据抽象级别。
与传统数据库面向应用进行数据组织的特点相对应,数据仓库中的数据是面向主题进行组织的。比如说,黑马出行会根据分析角度不同,分为不同的主题,如订单主题、司机主题、乘客主题等。
4.1.2 主题域
主题域通常是联系较为紧密的数据主题的集合。可以根据业务的关注点,将这些数据主题划分到不同的主题域。主题域的确定必须由最终用户和数据仓库的设计人员共同完成。
主题域、主题、实体间关系:
主题设计是对主题域进一步分解,细化的过程。主题域下面可以有多个主题,主题还可以划分成更多的子主题,而实体则是不可划分的最小单位。主题域、主题、实体的关系如下图所示。
4.2 主题域划分
在企业实际搭建数据仓库时,一般都是把核心业务的核心关注领域作为重点,围绕它来进行建设。这种建设方式因为涉及到主题的选择,必须先由最终用户和数据仓库建设人员共同确认主题域,然后继续完成搭建过程。
进行划分主题域时需要数仓建设人员了解业务流程,通过总结和分析清楚各个不同的业务流程都有哪些业务活动参与其中。
划分主题域的方法有很多,不同企业采取的方法也有所不同,总的来说,用得最多的有下面几种。
1) 按照业务系统划分
因为大部分企业都已经经历过了信息化建设或者正处于信息化建设当中,企业各种业务系统都已经部署完成,财务部门有财务系统、销售部门有销售系统、生产部门有生产系统、供应链部门有供应链系统…
这些不同的业务系统,因为只会储存对应业务流程中产生的数据,下级数据主题都互相紧贴,是天然的主题域,业务系统有几种,就可以划分为几种主题域。
2) 按照部门划分
现代企业都有着不同的业务部门,这些部门也会形成各种不同的主题域,比如说销售域、生产域、财务域等,而这些主题域也是由不同的数据主题组成的。
3) 按照需求划分
很多时候,企业需要长期对某个方向进行分析,因为这个长期分析的过程涉及到各种主题,会对数据进行细分、归纳,在这个过程中,就由需求诞生了主题域。
就拿销售分析来说,这个分析过程会涉及到的对象有产品、仓库、经销商、顾客等,其中每一个分析对象就是一个数仓主题,而包含归纳这些主题的销售分析就成为了一个相应的主题域。
4) 按照功能划分
在现代社会,软件是每个加入互联网的网民都会使用到的东西,这些由企业开发的软件拥有着不同的功能模块,比如说社交软件中就会有聊天、朋友圈、群聊、发送文件等功能。
从这些功能中选一个模块,聊天模块会涉及到数据仓库中的用户主题、图片主题、文字主题等,所以聊天模块也能被归纳为聊天主题域。
总而言之,切入的出发点逻辑不一样,就可以存在不同的划分逻辑。在建设过程中可采用迭代方式,不纠结于一次完成所有主题的抽象,可先从明确定义的主题开始,后续逐步归纳总结成自身行业的标准模型。