如何理解数据仓库?举个简单的例子。
我现在打算学习大数据的内容,所以我看了CSDN,博客园,微信的大数据公众号,一些实体书等等,并且我在看某些这些东西的时候,有些不错的文章我都收藏了,储存在这些论坛的账号中,实体书我也做了很多标记,来标出那些对我有用的部分。
看了好几个月之后,我打算来一次整体的复习,结果这个时候遇到了困难:我收藏的文章太多了,我完全记不得到底哪些文章在哪里了,如果我要找某一篇文章,我可能要从头开始一个一个的翻找这些论坛的收藏夹,看看我要找的东西到底在哪里,况且还要实体书呢!也要翻一遍!
这工作量也太大了,而且我每找一次东西都要几乎从头开始找一次,太麻烦了,此时我想到,我为什么不把我收藏夹的那些东西都放到一个地方呢?这样我也不用登录很多账号找了,此时我就想到,我是不是可以用Word软件呢?把收藏夹里面的文章都复制到Word里不就可以了吗?而且Word软件还有查找功能,比这样翻找的快太多了!立马行动,我开始把一篇文章从标题到内容全都复制到Word文档里,实体书上的我也打字打进来,花了好几天时间,我终于把所有的东西都搬到Word文档上了,真是累死了!
这个时候我又有了新的麻烦:虽然我按照一篇文档一个文件来分开,但是这些文件非常多,而且标题都不明确,单从文件名字上来看根本就不知道内容是什么,如果要知道是什么内容,还是需要一个一个打开来看。
这样并不比之前的操作要轻松啊?我花了这么多的时间,结果也就省了一个打开网页的操作,反而又增加了一个打开Word文档的操作,这样似乎比之前更麻烦了,毕竟我的电脑打开网页还好,打开Word可慢多了,这要怎么办呢?
这时候我又想到了一个办法:把这些文档全部打开看看,然后把文件名字改好,改成我一眼就能看得懂的名字,这样就很便于查找了吧,毕竟看一眼名字就知道这个文件是不是我想要的,于是我又花了好几天的时间,把这些文档按照文章的内容,概括出来一个主题,把它当作文档的名字,当我完成之后我觉得目前就可以很轻松的通过Wrod自带的查找功能来找到我想要的文档来看了,我觉得我的整理工作以及结束了
可是当我开始复习这些资料的时候,又发现了一个问题:这些文档读起来很冗余,很多的地方都是重复的,而且有的几乎都全部重复了仅仅有一小部分才是不同的,比如什么Hadoop的定义啥的,这些很多文档都写了,而且都是一模一样的,每次打开文档都要看一遍,而且还很占用我的磁盘空间,而另外一些,比如Hadoop的版本解读,我搜集的这些文档,从1.0.x到3.0.x的版本解读都有,但是我想要从1.0到3.0的版本变化,这样的话的得把这些文档全部都打开,然后一个文档一个文档的看,每次这样翻我也很烦躁,我只想更懒一点,为什么没有一个文档整理了从1.0到3.0所有的版本变化呢?我在网上也没找到,哎,靠人不如靠自己,我还是自己来吧!
这个时候我经过了前两次的整理经历之后我学聪明了,我没有一开始就着手整理,我想了一下,我现在到底需要整理成什么样子?
1.不变的东西整理到一个文档里面去,上面写上xxxx定义
2.会变的东西,比如版本解读啥的,每个版本都会有一个文档,这些我也整理到一个文档里面去,这样我就不用到处翻来翻去了
3.但是之前的这些东西我不能删掉,我自己合并的东西可能有的不全,或者是合并的有问题,我需要找原来的文档对比一下,如果我把之前的删掉,一旦我打错了字,我可能就会一直学了错的知识了
好吧,我目前就想到这么多,那我就开始整理吧!于是我又花了好几天的时间,把原来的文档中的东西提取出来,重复的定义都合并到一起并且只留一份,不同的版本解读我放到一个文档里面去,然后我要保存之前的那些原始的文档,这俩东西不能都在一个都放在一个文件夹里面吧,这样也太乱了,于是我又打算吧这两个放在两个文件夹里面,我创建了两个文件夹,一个存放原始的文档,一个存放我整理好的文档,然后把这俩文件夹都放到
一个叫知识库的文件夹里面,这样我的整理工作貌似真的已经完成了。
现在,我想看Hadoop相关的版本解读的话,我就打开版本解读文档就可以了,如果我想看Hadoop的定义和版本解读呢?我就打开这两个文档,一个放在屏幕左边,一个放在右边,这样看起来也很舒服,至此,我的整理工作真的算完成了。
然后我突然想到,我X,我不就是在搭建数据仓库吗???
是的,大家看到这里,如果对数据仓库有了一些了解的话已经知道了数据仓库的一般流程了,把上文的一些名词换成数据仓库的名词:
各个论坛和实体书的文章 ->搭建数仓之前各个系统的数据源,比如MySQL,Oracle等传统关系型数据,还要一些业务日志和埋点日志(比如说你在某宝点击某个商品啊,浏览了某些商品啊,这些都是有记录的,也叫做埋点数据,前端已经在你点击进入这个商品的详情页的时候做了埋点,你点进去就会产生了一条数据,会记录你点击的商品记录和你这个用户的一般信息,这就叫做埋点日志)
把这些不在同一个论坛,甚至在实体书上的文章,都统一放到Word文档上,并且稍微改个文件名 --->利用一些数据导入工具,比如Sqoop,Flume,DataX(阿里云的产品,但已开源),把这些不同系统上面的数据,都导入到同一个框架里,这里大部分都是导入到Hive里,它利用HDFS存储,具有天然的容灾性,查询的引擎是MR(也可以使用Spark),对于这么大的数据量是再适合不过了。这种迁移数据的行为已经是搭建数仓的一部分了,这些迁移过来的数据作为数据仓库的ODS层(数据准备层),这一层是为加下来的数据层提供原始数据,我们尽量不做什么变动,只做一些数据按日期分表存储,把这些数据按照主题和逻辑划分好。
把文章去重,把版本解读放到一起 --->对应数据仓库的DW层,这一层的主要任务就是把原始数据进行ETL,把原始数据分为维度表和事实表(这种方法称为维度建模),把细粒度的数据聚合成粗粒的表,把一些维度退化,形成业务宽表等等
使用文档 --->对应数据仓库的ADS层(也叫ST层),ST层面向用户应用和分析需求,包括前端报表、分析图表、KPI、仪表盘、OLAP、专题等分析,面向最终结果用户
这样,我们就完成了一个简单的数据仓库(三层),其中DW层还可以细分为DWD,DM等,这个就看实际情况了,灵活分层
数据湖与数据中台
至于数据湖和数据中台呢?
我是这样理解数据湖的,上面的例子里,我们在把各种不同论坛的文章导入到Word文档中的时候,其实已经丢失掉了一层信息:来源
放到Word文档之后,你就无法知道某篇文章到底来自于哪个论坛的了 ,而数据湖呢?数据湖是尽力保持所有数据的原始面貌,不丢失任何信息,同样,也不会做任何的处理(因为你处理数据多多少少会丢失掉一部分信息),尽力保持数据的原汁原味,因为谁也不知道以后某些数据又拥有多达的价值,所以我们需要保持数据的原封原貌,而这个时候我们可以把数据仓库想象成一个在湖边的矿泉水加工厂,一边抽取湖中的水(数据),进行各种清洗消毒加工,最后生产出各种各样包装的矿泉水来,这就是这两个概念我自己理解。
下面是维基百科上关于数据湖的定义:数据湖(Data Lake)是一个存储企业的各种各样原始数据的大型仓库,其中的数据可供存取、处理、分析及传输。数据湖是以其自然格式存储的数据的系统或存储库,通常是对象blob或文件。数据湖通常是企业所有数据的单一存储,包括源系统数据的原始副本,以及用于报告、可视化、分析和机器学习等任务的转换数据。数据湖可以包括来自关系数据库(行和列)的结构化数据,半结构化数据(CSV,日志,XML,JSON),非结构化数据(电子邮件,文档,PDF)和二进制数据(图像,音频,视频)。
至于数据中台呢?我们先来看下数据中台的定义:
数据中台是指通过企业内外部多源异构的数据采集、治理、建模、分析,应用,使数据对内优化管理提高业务,对外可以数据合作价值释放,成为企业数据资产管理中枢。数据中台建立后,会形成数据API,为企业和客户提供高效各种数据服务。(这个概念最早由阿里提出,实际上阿里云的一些云产品就是一个大的数据中台)
又回到之前说的矿泉水加工厂的例子,如果我们只有一个加工厂,那肯定是仅仅不够的,因为我们不仅要喝水,还要喝的是安全健康的水,这个检测如果工厂内自己做,大家还是不太相信的,那么还是需要别人来检测,监管加工厂的质量和水质等安全问题,这些的监管检测机制,而且还有一个问题就是,加工厂缺少一个管账的,内部的财务状况很混乱, 因此,加工厂又请了另一家公司来为他们做财务管理,如此,再加上加工厂内部的更新换代,又增加了新技术来加工矿泉水(机器学习,数据挖掘等),加工厂是越来越大了,而包含兼管人员,财务管理和整个加工厂在内的,就是大家常说的数据中台了。
以上就是我自己理解的数据仓库、数据湖和数据中台的概念了,如果有错误,欢迎在评论区指正!