面试官:能用通俗的方式说一下什么是数据仓库吗

想起之前面试,面试官问我:什么是数据仓库?能用通俗易懂的方式说一下吗?
好家伙,这不正好是我的拿手好戏吗。好,开讲!

什么是数据仓库

数据仓库(下文以“数仓”称),顾名思义,存放数据的仓库,它集合了各个业务系统的数据,以金融业为例,数仓包含了贷款业务、CRM、存款业务等数据。用于企业做数据分析、出报告、做决策;在有些公司也作为各业务系统的数据来源。

从逻辑上理解,数据库和数仓没有区别,都是通过数据库软件实现存放数据的地方,只不过从数据量来说,数据仓库要比数据库更庞大。

他们最主要的区别在于,传统事务型数据库如 MySQL 用于做联机事务处理(OLTP),例如交易事件的发生等;而数据仓库主要用于联机分析处理(OLAP),例如出报表等。

你可能想,数据分析、出报表等工作也可以直接通过业务数据库完成呀,数据仓库似乎也不是必需品。

如果是简单的系统,比如初创时期,业务量少,用户和数据少,几台服务器和几个MySQL组成的系统,那确实可以实现。但当业务越做越多,用户和数据量很庞大,出报表需要跨集群关联多个系统的数据实现的话,那数仓还是很有必要的。

如果还不能理解,先想几个问题

  • 如果你要的数据分别存放在很多个不同的数据库,甚至存在于各种日志文件中,你要如何获取这些数据?

  • 如果你从各数据源中取出了你要的数据,但是发现格式不一样,或者数据类型不一样,你要怎么规范?

  • 如果有一天你需要在业务系统查历史数据,但发现这些数据被修改过的,你要怎么办?

  • 如果要跨集群关联各个不同业务系统的数据,要怎么做?怎么优化查询时间?

  • ……

数仓的出现,可以很好的解决上面这些问题。它通过数据抽取和清洗,将各个业务系统的数据整合落地到一个系统(数仓),规范化数据,方便在出报表做决策的时候获取数据。

数仓架构

说到这,我心想:“单独讲这些还不够,给你讲一下特点。”

数仓的特点

  • 集成性

数仓中存储的数据来源于多个数据源,原始数据在不同数据源中的存储方式各不相同。要整合成为最终的数据集合,需要从数据源经过一系列抽取、清洗、转换的过程。

  • 稳定性

数仓中保存的数据是历史记录,不允许被修改。用户只能通过分析工具进行查询和分析。

  • 动态性

数仓的数据会随时间变化而定期更新,这里的定期更新不是指修改数据,一般是将业务系统发生变化的数据定期同步到数仓,和稳定性不冲突。不可更新是针对应用而言,即用户分析处理时不更新数据。

  • 主题性

传统数据库对应的业务不同,数仓需要根据需求,将不同数据源的数据进行整合,即数据一般都围绕某一业务主题进行建模。例如“贷款”主题、“存款”主题等。

你以为到此结束了吗?并没有!这不得讲一下分层?

数仓分层

数仓一般是分层的,而且各个公司都基于自己的业务场景进行分层,目前的分层可以说是五花八门,没有标准答案。但是最主流的还是按照这样进行分层:

数仓分层

可能你又要问了,直接取需要的数据落地到表就行了,为什么要分层?有啥好处?

试想一下,如果不做分层,你按照需求从各个源系统抽取数据落地了一张表,哪一天老板让你在原来的基础上加个字段,你怎么做?

或者哪天这张表的数据出问题了,你如何定位是哪个模块或者环节出了问题?

数仓分层的意义在于

  • 减少重复开发,在数据开发的过程中可以产生中间层,将公共逻辑下沉,减少重复计算;
  • 清晰数据结构,每个分层分工明确,方便开发人员理解;
  • 方便定位问题,通过分层了解数据血缘关系,在出问题的时候通过回溯定位问题;
  • 简单化复杂问题,和分治法思想类似,分而治之,将复杂的问题简单化,还能解耦

总结

本文简单介绍了数仓的概念和数仓的作用,以及数仓的分层和分层的优点,也算是简单的入门。

后续如果有机会,我会继续产出数仓和大数据相关的文章,如果觉得对你有帮助,可以点个赞再随手关注,防止迷路。


Author:大数据的奇妙冒险
转载请注明来源

#大数据##数据仓库工程师##快乐学习#
大数据从入门到放弃 文章被收录于专栏

写点大数据相关的内容,一起交流进步

全部评论
牛客的博客好像很少人看,发到帖子总有人看了吧
7 回复 分享
发布于 2022-06-21 19:22
同学,可以投递下字节的大数据岗位呀https://job.toutiao.com/s/2jYPboC
点赞 回复 分享
发布于 2022-07-15 11:33
写的很好!
点赞 回复 分享
发布于 2022-07-08 08:37
厉害,给你点赞
点赞 回复 分享
发布于 2022-06-25 17:59

相关推荐

02-07 12:06
已编辑
华侨大学 测试开发
最近看到很多 92 的,甚至是硕士,开始往测开赛道卷,说实话有点看不懂。先把话说清楚,大厂里的测开,绝大多数时间干的还是测试的活,只是写点自动化脚本、维护测试平台、接接流水线,真正像开发一样做系统、做架构、做核心平台的测开少得可怜,基本都集中在核心提效组,而且人很少,外面进去的大概率轮不到你,我想真正干过人都清楚。很多人被洗脑了,以为测开也是开,和后端差不多,只是更简单、更轻松、还高薪。现实情况是,测开和开发的职业路径完全不一样。开发的核心是业务和系统能力,测开的核心是稳定性和覆盖率,前者是往上走,后者天花板非常明显。你可以见到很多开发转测开,但你很少见到干了几年测开还能顺利转回开发的。更现实一点说,92 的高学历如果拿来做测开,大部分时间就是在做重复性很强的杂活,这种工作对个人能力的放大效应非常弱。三年下来,你和一个双非的,甚至本科的测开差距不会太大,但你和同龄的后端、平台开发差距会非常明显。这不是努不努力的问题,是赛道问题。所谓测开简单高薪,本质上是把极少数核心测开的上限,当成了整个岗位的常态来宣传。那些工资高、技术强的测开,本身就是开发水平,只是挂了个测开的名。普通人进去,99% 做的都是项目兜底型工作,而不是你想象中的平台开发。测开不是不能做,但它绝对不是开发的平替,也不是性价比最优解。如果你是真的不想做开发,追求稳定,那测开没问题。但如果你只是觉得测开比后端容易,还能进大厂,那我劝你冷静一点,这只是在用短期安全感换长期天花板。有92的学历,如果你连测开这些重复性工作都能心甘情愿接受,那你把时间精力用在真正的开发、系统、业务深度上,回报大概率比卷测开要高得多。想清楚再下场,别被岗位名和话术带偏了,就算去个前端客户端也是随便占坑的,测开是一个坑位很少赛道,反而大面积学历下放,不用想也能知道会是什么结果,我想各位在JAVA那里已经看到了
小浪_Coding:工作只是谋生的手段 而不是相互比较和歧视
点赞 评论 收藏
分享
评论
42
167
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务