2020年,如约而至,本来心里想的2020年是一个美满年,是一个平安年,是一个爱情年,可是却被一场突如其来的疫情给践踏了,回村后,路封了,村子封了,哪里都不能去,此时的你都在干嘛呢,看头条?拍抖音?不如一起来学习学习,充实下自己,等到疫情退去,春暖花开,我们一起肩并着肩一起实现自己的人生理想!




仓库风格架构模式 仓库架构图_仓库风格架构模式


好了,话不多说,今天跟大家一起讨论的是数据仓库的架构及分层,最近闲来无事,也投了些简历进行了个视频面试,好多在刚开始就会问你们公司是怎么搭建数据仓库的,数据仓库的架构分层,以及你个人对数据仓库的看法诸如此类的问题,所以要想拿到一个好的数据仓库相关的offer,就必须要清楚数据仓库的架构及分层。在说数据仓库架构及分层之前,先看下数据仓库的基本概念

一.数据仓库的定义

数据仓库是一个面向主题的、集成的、随时间变化的、但信息本身相对稳定的数据集合,用于对管理决策过程的支持。数据仓库本身并不“生产”任何数据,同时自身也不需要“消费”任何的数据,数据来源于外部,并且开放给外部应用使用。

二.数据仓库的特点

面向主题的:数据仓库都是基于某个明确的主题,仅需要与该主题相关的数据,其他的无关细节将会被去掉。

集成的:数据仓库里面的数据都是经过ETL( Extract-Transform-Load 抽取-转换-加载)操作后被集中放到同一个数据源,数据仓库里的数据是来自于各种不同的数据源。

随时间变化的:关键数据隐式或者显示地随时间变化而变化。

数据相对稳定的:数据装入后一般只是进行查询操作,没有传统数据库的增删改操作。

总结:数据仓库就是整合多个数据源的历史数据进行细粒度的、多维的分析,可以有效地帮助高层管理者或者业务分析人员做出商业战略决策或商业报表。

三.数据仓库的作用

可以整合公司的所有业务,建立统一的数据中心,所有数据从数据中心出数,保证数据的一致性

分析用户行为数据,通过数据挖掘来降低投入成本,提高投入效果。

可以作为各个业务的数据源,形成业务数据互相反馈的良性循环。

可以提供数据报表,用于公司的决策等等。

四.数据仓库架构


仓库风格架构模式 仓库架构图_仓库风格架构模式_02

数据仓库架构图


五.数据仓库的分层设计

说一下数据分层的情况,以及解决了什么问题

ods(贴源层) :直接源数据库同步过来,保留原始数据,方便后期查找问题。

同步方式:数据初始化时是从源数据库(mysql)sqoop到hive中,增量数据是canal监听mysql的binlog日志来获得增量的数据更新,当天的增量数据和前一天的全量数据做全外连接,重新加载最新的全量数据

dwd(明细层) :从ODS层中获得的数据按照主题通过维度建模的方式建立各种数据模型,包括维度表和事实表,把所有可变的和不可变的内容以增量或全量的方式保存为历史记录表,将维度退化到事实表中,建立数据中间层,减少数据的重复计算

dws(汇总层) :基于明细层数据对数据进行汇总产出,抽象出来一些通用的维度,并根据这些维度做一些统计值,这里做一层轻度汇总会让计算更加高效,在此基础上如果计算仅7天、30天、90天的行为的话会快很多

app(数据应用层):将需要的维度指标在报表中展示,方便业务人员查看数据并分析数据,及时做出相关决策

六.数据分层的好处

分层的主要原因是在管理数据的时候,能对数据有一个更加清晰的掌控,详细来讲,主要有下面几个原因:

空间换时间:通过建设多层次的数据模型供用户使用,避免用户直接使用操作型数据,可以更高效的访问数据。

便于处理业务的变化:随着业务的变化,只需要调整底层的数据,实现应用层对业务的调整零感知.

屏蔽原始数据的异常:屏蔽业务的影响,不必改一次业务就需要重新接入数据

清晰数据结构:每一个数据分层都有它的作用域,这样我们在使用表的时候能更方便地定位和理解。

数据血缘追踪:简单来说,我们最终给业务呈现的是一个能直接使用业务表,但是它的来源有很多,如果有一张来源表出问题了,我们希望能够快速准确地定位到问题,并清楚它的危害范围。

减少重复开发:规范数据分层,开发一些通用的中间层数据,能够减少极大的重复计算。

把复杂问题简单化:将一个复杂的任务分解成多个步骤来完成,每一层只处理单一的步骤,比较简单和容易理解。而且便于维护数据的准确性,当数据出现问题之后,可以不用修复所有的数据,只需要从有问题的步骤开始修复。