数据仓库基础知识-全

目录

一、数仓简介

        1、数据仓库诞生原因

        2、数据仓库(Data Warehouse,DW)的基本概念

        3、数据库与数据仓库的区别

         4、数据仓库的建设方案

        5、MPP架构与分布式架构区别

二、数仓基本架构

三、数仓建模方法-宽表模型

四、案例-电商数据统计分析

五、总结

六、案例-电商数据统计分析续


一、数仓简介

        1、数据仓库诞生原因

        历史数据积存:对于企业来说,线上的业务系统随着业务的进行,会源源不断的产生数据。这些数据会存储在企业的业务数据库中(比如mysql....)。但是,随着时间的推移,业务数据库中积压的数据会越来越多,这会使得业务数据库产生一定的负载,导致业务系统运行缓慢,用户体验差。这些堆积的数据中大多数是冷数据,即很久远的数据,使用频率不高的数据。为了避免这些冷数据对业务数据库产生影响,妨碍业务的正常运行,企业需要定期将这些积压的冷数据从业务数据库中转移到一个专门用于存放历史数据的仓库中,这个仓库就是数据仓库。至此,业务数据库只存放高频数据,负荷小,可以很好的支持业务系统的正常运行,如果需要用到历史数据在从数据仓库中进行操作。

        企业数据分析需要:企业将上述历史数据存储到数据仓库中后,这些数据不仅可以帮助改善业务数据库的性能,同时企业可以对这些数据进行分析、统计,从而辅助管理层进行决策。但是,对于某些新兴企业来说,并没有历史数据的积存,这些企业一般有很多部门,他们建立数仓的目的仅仅就是进行数据分析。那么各部门在进行数据分析之前只能从业务数据库中获取数据(利用他们自己的数据抽取系统从业务数据库中抽取数据)。这种方式是存在问题的会导致各部门数据分析的结果不一致,假设部门A早上9点从业务数据库中抽取数据进行分析,而部门B是在下午2点进行的抽取分析,显然它们获取的数据不一致,那分析的结果一定也存在差异。此外,每个部门都有一个数据抽取系统资源浪费严重,且不安全。为了解决这个问题,企业需要统计建立一个数据仓库,使用专门的数据抽取系统定期从业务数据库中抽取数据,这样就不需要每个部门配一个数据抽取系统了,而且解决了各部门分析结果不一致的问题。

         比如数据仓库每天晚上12点抽取一次数据,各部门需要使用数据时,直接从数据仓库中取,显然各部门获取的数据都是一致的。而且将业务数据与历史数据进行划分,业务数据库只针对业务,数仓只针对数据分析,这样企业管理这些数据就更有针对性了,方面了管理,安全性得到提升。

        同时,A部门想要B部门的数据,如果没有数据仓库还需要向B部门申请,很麻烦,有了数据仓库,直接从中取就行了。数据仓库相当于为各部门建立一个统一的数据镜像。

        2、数据仓库(Data Warehouse,DW)的基本概念

        数据仓库是一个面向主题的、集成的、非易失的且随时间变化的数据集合。

        主要用于组织积累的历史数据,并使用分析方法(OLAP在线分析处理、数据分析)进行分析整理,进而辅助决策,为管理者、企业系统提供数据支持,构建商业智能。

        面向主题:由于数仓存储历史数据的主要目的是为了对数据分析提供服务,在数据分析过程中一般会有各种类型的主题(分析用户行为特征主题、分析用户购买商品类型主题),但是直接从业务数据库中获取的数据是零散的,无法满足数据分析的需要。因此,我们需要根据数据分析的主题,将各种分散的数据表进行聚合,这样可以方便后续分析过程。

         集成:原始数据来源于不同的数据源,要整合成最终数据,需要经过ETL清洗过程以及标准化处理。具体来讲,首先聚合而成的大数据里,可能存在一些缺失或异常的数据,我们需要对这些数据进行过滤(Extract);其次,将业务数据聚合成某个主题的大数据表后,需要按照某些需求进行数据分析,因此需要根据不同的需求对该大数据表进行进一步转换(Transform例如添加一些冗余列字段),方便按照需求进行分析;然后将转换后的数据加载(Load)到新的表中;最后原始数据可能来源于不同的数据源,数据中相同字段可能采用不同的书写形式,需要将其进行标准化处理。

         例如,每个表针对性别这一列,有不同的表达方式(m,f;1,0;........);每个表针对相同的字段,有不同的字段名;每个表针对相同字段的描述信息也不一致,都需要标准化处理。

        非易失:数仓中保存的数据是一系列历史快照,从业务数据库中同步过来的数据,这些数据不允许被修改,只允许通过工具进行查询、分析。因此,数据不容易丢失。

        时变性:数仓会定期从业务数据库中抽取、集成新的数据,从而反应出数据的最新变化。

        3、数据库与数据仓库的区别

        4、数据仓库的建设方案

        传统数据仓库:由若干关系型数据库组成大规模并行处理(MPP)集群。

         优点:数据迁移很方便,迁移成本低,因为一般业务数据库是单机的mysql等关系型数据库,将数仓同样建设为关系型数据库,这样同步业务数据库数据时很方便,不需要对数据进行再改造,成本低;传统数仓在数据量没有达到某个量级时,是非常优秀的解决方案;由于传统数仓是单机数据库改造过来的,所以它完全兼容原有的SQL语法。

         缺点:扩展性有限。当数据量超过某个量级时,需要额外增加更多的数据库,但我们并 不能无限制的增加数量,因为数量越多越混乱,越不好管理,出错的频率就越大,安全性会变差。

                    热点问题。传统数仓由若干数据库组成,那么从业务数据库抽取来的数据需要被划分为若干份,分别存储到不同的子数据库中,当子数据库1中的数据是热点数据,访问频率极高,而其他子数据库中的数据访问频率极低,这样会导致子数据库1负荷极大,可能导致宕机、超时。一旦它成为瓶颈,整个系统也会变慢。

         大数据数据仓库:它基于大数据天然的分布式存储和分布式计算,并添加了SQL的支持(Hive)。实质就是将分布式集群的HDFS文件系统组成数仓,完成海量数据的存放。在数据处理方面,为了避免海量数据的移动,造成IO和网络的开销,大数据数仓使用了移动计算的架构,而不是移动数据。传统数仓在面对计算任务时需要大量的数据移动工作,大数据数仓是将计算任务分发到数据存储位置,然后进行计算。

         优点:解决了扩展性有限问题。大数据数据仓库是以文件系统的方式存放数据,数据会以文 件的形式存放,文件这种类型扩展性很好。

                    缓解了热点问题。前面我们学到过向HDFS文件系统中存数据时,数据本身会被划分为若干Block块,且每个块默认都有3个备份,这些备份会分发到其他节点上。正是这种备份机制,使得后续在计算某个任务时,可以将该任务分发到最空闲的数据节点上,这样避免了某个节点负荷过高,导致的性能缓慢。此外值得注意的是,每个Block都有备份,那么系统的容错能力就得到提高,可扩展性得到极大提升。

         缺点:SQL支持率问题。传统数仓本身就是关系型数据库,可以完全兼容SQL。但大数据数 仓实质是HDFS文件系统(Hive当中的数据库与表本质上都是存储在HDFS上/user/hive/warehouse中的文件夹),并不是原生的关系型数据库。因此SQL支持率不如传统数仓。但是,目前随着技术的发展,现有大数据产品的SQL支持率也是越来越高,也接近完全兼容了。

                    缺少事务支持。由于大数据数仓是基于分布式架构的,相对于传统的单机数据库来 说,在分布式架构中实现事务比较复杂。但是值得注意的是在数仓中实现事务并没有那么重要,因为数仓是面向数据分析的。

                    数据量较少时,计算速度很慢。例如前面在hive中跑mapreduce程序,很小很小的数 据却需要跑1-2分钟。但是大数据数仓本身针对的对象是海量数据,小的数据本身不需要大数据数仓来完成。

        基于此,可以看出相比于大数据数仓的优点,它的缺点就不足为道了。

        总结:大数据数据仓库是一个很庞大的概念,它不仅可以存放海量的数据,在其内部还构建了很多其他组件例如数据聚合、数据清洗ETL、数据标准化、Hive、Hbase、分布式存储计算,资源调度(hadoop的三大组件)。如下图大方框中的内容全部属于大数据数仓。

        5、MPP架构与分布式架构区别

        (1)MPP架构

        将单机数据库节点组成集群,提升整体性能。节点之间采用非共享架构,每个节点有独立的磁盘存储系统和内存系统。有计算任务后每个节点独立运行,不需要关系集群的整体状态(每个节点各顾各的)。

        节点之间通过专用网络相互连接,因为MPP架构会有大量的数据移动,普通局域网无法完成。只能整体对外提供服务,单个节点无法单独运行局部的一个程序,因为数据不透明,单个节点独立运行找不到需要的数据在那。

        MPP本质上是关系型数据库(业务数据库),它继承了业务数据库的优点,设计上优先考虑C(一致性),其次A(可用性),尽量做好P(分区容错性)。适合中等规模的结构化数据处理。

        MPP的缺点:扩展性有限、热点问题。

                               数据存储位置不透明,查询任务在所有节点均会执行。

        (2)分布式架构(Hadoop)

        MPP架构的数据存储与计算是综合在一起的,因此我们并不知道数据在哪里存放。而分布式架构将分布式存储HDFS与分布式计算MapReduce划分开来,这样数据就透明了,各节点就可以单独运行局部应用了。

        分布式架构使用局域网或广域网连接,通信开销大,不如MPP的专用网络。因此分布式架构在运算时致力于减少数据移动,而采用移动计算架构。

        在设计上优先考虑分区容错性P,其次A,最后C。存储数据时每个Block有3个备份。

        (3)MPP+分布式架构

        数据存储采用HDFS,提高分区容错性;上层架构采用MPP,减少运算时延

二、数仓基本架构

        1、数仓的整体架构分为4个部分分别是:ETL、ODS层、CDM层和ADS层。        

         (1)首先定时从业务数据库中抽取历史数据到数据仓库中的ODS层,该层与原始数据保持一致,目的就是保存原始数据,且该层的数据不允许被修改。业务数据库一般保存最新的数据,当历史数据导入到数据仓库后,为了保障业务数据库正常运行,都会将这部分历史数据从业务数据库中删除。如果后续需要用到这些历史数据就直接从ODS层中获取。因为有ODS层的存在,保证了数仓的非易失性。

        (2)其次,将ODS层的数据进行ETL清洗存储到DWD层,为数据分析作服务,该层的数据是经过清洗后的数据,但同样还是零散的。

        (3)然后将DWD层的数据按照主题进行聚合汇总形成一张大表,并存储到DWS层,为数据分析作服务。

        (4)最后拿到DWS层的数据进行数据分析,并将分析的结果可视化展示、形成报表.....。

        总结: ETL进行数据清洗

                   ODS层保存历史数据,完成数据的积存

                   CDM层服务于数据分析

                   ADS层对结果的应用

        2、数据抽取与ETL

       数据抽取方式有全量同步、增量同步两种方式

                全量同步会将业务数据库中的全部数据进行抽取,一般用于初始化数据装载

                增量同步会检测数据的变动,抽取发生变动的数据,一般用于数据更新

       ETL包含数据过滤、转换、加载。数据过滤用于对数据中出现的重复、二义性、不完整、异常、违法业务逻辑的数据进行过滤。数据转换用于对数据进行标准化、增加一些冗余列,方便后续按需求进行统计等等。结构化数据一般本身符合规范在数据过滤和转换过程中的逻辑简单,非|半结构化数据的过滤转换工作较复杂,较费时。

        数据抽取和ETL规则的设计和实施约占整个数仓搭建工作量的60%-80%。

        注意:有的人将数据抽取(Extract)与ETL一起统称为ETL。

        常见的ETL工具:Sqoop、Kettle、Datastage、Informatica、Kafka     (结构化数据ETL工具)

                                     Flume、Logstash        (非|半结构化数据ETL工具)

        3、ODS层

        ODS层数据与原业务数据保持一致,在一致的基础上可以增加额外字段用来方便数据管理。因此在实际的企业开发中ODS层是原始业务数据的一个扩充,

         问题1:我们注意到update_type中有insert、update,ODS层的数据不是不允许修改吗?为什么这里会有insert与update呢?

        首先insert类型一定是有的,因为ODS层的历史数据一定是从业务数据库中经数据抽取插入进去的,因此一开始数据都是insert类型。插入完成后,业务数据库中的历史数据将被删除,后续想要访问历史数据需要操作ODS层。那对于ODS层的历史数据业务数据库就只有查询功能吗,显然不是,一定可以修改,只不过这种修改不在ODS层中进行。业务数据库可以先把想要修改的历史数据从ODS层中查询出来,然后在业务系统里对其进行修改,最后追加(增量同步)到ODS层中。该数据的类型就变成了update。通过insert与update可以标识那些数据是新增的那些数据是修改的。

        问题2:在追加的过程中一定是即有修改的数据又有最新的数据,ODS层如何识别那些是最新的数据,那些是修改的数据呢?

        为了识别不同类型的数据,ODS层在抽取到数据后会与已有的数据进行join操作。没有join成功的数据一定是最新的数据(insert类型),join成功的数据一定是修改的数据(update类型)。update类型的数据在ODS层是冗余数据,业务数据库对历史数据修改的越频繁,数据仓库中的冗余数据会越来越多。为了解决冗余数据多的问题,企业大多使用外连接&全覆盖的方式进行追加。

        外连接&全覆盖方式就是将ODS层的历史数据抽取出来与增量数据在外部进行join操作,识别出那些是最新数据,那些是修改数据,然后直接在外部(内存中)对历史数据要修改的数据进行修改,最后将历史数据与最新数据全覆盖到ODS层,这样就不会出现冗余数据同时能够保持与业务系统一致的数据。

        4、CDM、ADS层

        DWD层对ODS层的数据进行清洗、标准化、维度退化。

        维度退化就是例如某公司是个大厂,北京、上海、广州、深圳等地都有分公司。每个分公司都有一套业务系统,都会产生一堆表,比如北京、上海、广州、深圳的分公司都有用户表,这样就有4个用户表,只是地域维度不同,因此需要将地域维度退化掉,将4张表合并为一张表增加一个city字段,这样就将地域维度退化掉了。

         维度退化是将不同维度但相同的表进行组合。总之,DWD层的数据还是零散的,仍然满足3NF。

        DWS层对DWD层的数据按分析主题进行聚合(是将不同的表进行组合)。DWS层的数据是有主题的,已经不满足3NF了,DWS层的数据注重的是如何方便后续的数据分析,提升数据分析的性能。除此之外在DWS层会对聚合后的数据进行建模(比如维度模型:将数据进行分类整理划分为维度表和事实表;宽表模型:将维度表与事实表在融合),目的是将聚合后的大表进行整理,加快后续数据分析效率。

         ADS层(数据应用层,数据分析层)也称为数据集市,用于存储数据分析的结果,为不同业务场景提供接口。比如后续要对结果进行报表决策,可以将分析的结果存储在Kylin中.....。针对不同的查询业务,可以将数据分析的结果存储在利于查询的应用中,因此ADS层可能由多个产品来组成

        总之,数据仓库从广泛上讲就是ODS层,DW层,和ADS层,具体来讲数据仓库实质就是ODS层,用于将分散的业务数据全部(包括不同不同主题的数据)聚集在一起进行相关处理。数据集市就是ADS层即数据分析的结果存放在不同的应用中,方便不同的用户或不同的场景使用。一个数据仓库可以有多个数据集市,因为每个主题都会有各自的分析结果。因此数据集市与主题密切相关。

三、数仓建模方法-宽表模型

        1、OLTP与OLAP

        (1)OLTP

        业务数据库属于OLTP(在线事务处理)系统,为了保证数据的一致性,减少冗余,常用ER模型,ER模型就是尽量将表进行拆分使其满足3NF。

        (2)OLAP

        数仓属于OLAP(在线分析处理)系统,主要操作是复杂分析查询;关注数据整合,以及分析,处理性能。OLAP根据数据存储的方式不同,又分为ROLAP(Relation OLAP,关系型OLAP),MOLAP(Multidimensional OLAP,多维型OLAP),HOLAP(Hybrid OLAP,混合架构的OLAP)。

        ROLAP是最常见的OLAP,使用关系型数据库搭建而成,因此它更注重事务这块,数据分析能力不是太强。为此,MOLAP诞生可以极大的提升数据分析性能,它在数据分析之前预先分组(group by)计算,节省大量计算时间。HOLAP是R与M的综合,查询效率比R高,但低于M。

        2、ROLAP建模方法(我们研究的对象)

        典型的数仓建模方法有ER模型(与OLTP的ER不同这里的ER模型更注重数据分析)、Data Value、Anchor、维度模型,其中维度模型较为常用。ER模型、Data Value、Anchor适用于变动不频繁的数仓,适合于传统的行业。互联网行业本身业务变动比较频繁,不适合使用ER模型、Data Value、Anchor来建模。维度模型比较灵活适应互联网行业的多变性。

        (1)维度模型

        维度模型中,大表被拆分为维度表和事实表,维度是对事实的一种分类、组织。维度一般包括分类、时间、地域等。

         维度模型相当于提前对表进行按不同维度Group by。维度模型根据事实表和维度表的排列方式不同又分为星型模型、雪花模型和星座模型。

        (2)星型模型

        维度只有一层,分析性能最优

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值