热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

开发笔记:数据仓库的ETLOLAP和BI应用

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据仓库的ETLOLAP和BI应用相关的知识,希望对你有一定的参考价值。

篇首语:本文由编程笔记#小编为大家整理,主要介绍了数据仓库的ETLOLAP和BI应用相关的知识,希望对你有一定的参考价值。




上一篇重点讲解了数据仓库建模,它是数据仓库开发中最核心的部分。然而完整的数据仓库系统还会涉及其他一些组件的开发,其中最主要的是ETL工程,在线分析处理工具(OLAP)和商务智能(BI)应用等。



本文将对这些方面做一个总体性的介绍(尤其是OLAP),旨在让读者对数据仓库的认识提升到一个全局性的高度。




全文共 4500 字,读完需要12分钟~



文 | 穆晨




▍创建数据仓库


数据仓库的创建方法和数据库类似,也是通过编写DDL语句来实现。在过去,数据仓库系统大都建立在RDBMS上,因为维度建模其实也可以看做是关系建模的一种。但如今随着开源分布式数据仓库工具如Hadoop Hive,Spark SQL的兴起,开发人员往往将建模和实现分离。使用专门的建模软件进行ER建模、关系建模、维度建模,而具体实现则在Hive/Spark SQL下进行。没办法,谁让这些开源工具没有提供自带的可视化建模插件呢。


话说现在的开源分布式工具都是"散兵作战",完成一个大的项目要组合N个工具,没有一个统一的开发平台。
还有就是可视化效果比较差,界面很难看或者没有界面。
个人建议在资金足够的情况下尽量使用商用大数据平台来开发,虽然这些商用产品广告打得多少有点夸张,但是它们的易用性做的是真好。
这里笔者推荐帆软的BI平台,附链接:
https://www.finebi.com/。








▍ETL:抽取、转换、加载


在本系列第一篇中,曾大致介绍了该环节,它很可能是数据仓库开发中最耗时的阶段。


ETL工作的实质就是从各个数据源提取数据,对数据进行转换,并最终加载填充数据到数据仓库维度建模后的表中。
只有当这些维度/事实表被填充好,ETL工作才算完成。
接下来分别对抽取,转换,加载这三个环节进行讲解:


1. 抽取(Extract)





数据仓库是面向分析的,而操作型数据库是面向应用的。
显然,并不是所有用于支撑业务系统的数据都有拿来分析的必要。
因此,该阶段主要是根据数据仓库主题、主题域确定需要从应用数据库中提取的数。




具体开发过程中,开发人员必然经常发现某些ETL步骤和数据仓库建模后的表描述不符。
这时候就要重新核对、设计需求,重新进行ETL。
正如数据库系列的这篇中讲到的,任何涉及到需求的变动,都需要重头开始并更新需求文档。




2. 转换(Transform)





转换步骤主要是指对提取好了的数据的结构进行转换,以满足目标数据仓库模型的过程。
此外,转换过程也负责数据质量工作,这部分也被称为数据清洗(data cleaning)。
数据质量涵盖的内容可具体参考这里。




3. 加载(Load)





加载过程将已经提取好了,转换后保证了数据质量的数据加载到目标数据仓库。
加载可分为两种L:
首次加载(first load)和刷新加载(refresh load)。
其中,首次加载会涉及到大量数据,而刷新加载则属于一种微批量式的加载。




多说一句,如今随着各种分布式、云计算工具的兴起,ETL实则变成了ELT。
就是业务系统自身不会做转换工作,而是在简单的清洗后将数据导入分布式平台,让平台统一进行清洗转换等工作。
这样做能充分利用平台的分布式特性,同时使业务系统更专注于业务本身。






▍OLAP/BI工具


数据仓库建设好以后,用户就可以编写SQL语句对其进行访问并对其中数据进行分析。
但每次查询都要编写SQL语句的话,未免太麻烦,而且对维度建模数据进行分析的SQL代码套路比较固定。
于是,便有了OLAP工具,它专用于维度建模数据的分析。
而BI工具则是能够将OLAP的结果以图表的方式展现出来,它和OLAP通常出现在一起。
(注:
本文所指的OLAP工具均指代这两者。
)




在规范化数据仓库中OLAP工具和数据仓库的关系大致是这样的:
 

数据仓库的ETL、OLAP和BI应用



 这种情况下,OLAP不允许访问中心数据库。
一方面中心数据库是采取规范化建模的,而OLAP只支持对维度建模数据的分析;
另一方面规范化数据仓库的中心数据库本身就不允许上层开发人员访问。
而在维度建模数据仓库中,OLAP/BI工具和数据仓库的关系则是这样的:



数据仓库的ETL、OLAP和BI应用



在维度建模数据仓库中,OLAP不但可以从数据仓库中直接取数进行分析,还能对架构在其上的数据集市群做同样工作。
对该部分讲解感到模糊的读者请重看上篇中三种数据仓库建模体系部分。









▍数据立方体(Data Cube)





在介绍OLAP工具的具体使用前,先要了解这个概念:
数据立方体(Data Cube)。




很多年前,当我们要手工从一堆数据中提取信息时,我们会分析一堆数据报告。
通常这些数据报告采用二维表示,是行与列组成的二维表格。
但在真实世界里我们分析数据的角度很可能有多个,数据立方体可以理解为就是维度扩展后的二维表格。
下图展示了一个三维数据立方体:


数据仓库的ETL、OLAP和BI应用








尽管这个例子是三维的,但更多时候数据立方体是N维的。
它的实现有两种方式,本文后面部分会讲到。
其中上一篇讲到的星形模式就是其中一种,该模式其实是一种连接关系表与数据立方体的桥梁。
但对于大多数纯OLAP使用者来讲,数据分析的对象就是这个逻辑概念上的数据立方体,其具体实现不用深究。
对于这些OLAP工具的使用者来讲,基本用法是首先配置好维表、事实表,然后在每次查询的时候告诉OLAP需要展示的维度和事实字段和操作类型即可。




下面介绍数据立方体中最常见的五大操作:
切片,切块,旋转,上卷,下钻





1. 切片和切块(Slice and Dice)





在数据立方体的某一维度上选定一个维成员的操作叫切片,而对两个或多个维执行选择则叫做切块。
下图逻辑上展示了切片和切块操作:


数据仓库的ETL、OLAP和BI应用




两种操作的SQL模拟语句如下,主要是对W
HERE语句做工作:
























# 切片SELECT Locates.地区, Products.分类, SUM(数量)FROM Sales, Dates, Products, LocatesWHERE Dates.季度 = 2 AND Sales.Date_key = Dates.Date_key AND Sales.Locate_key = Locates.Locate_key AND Sales.Product_key = Products.Product_keyGROUP BY Locates.地区, Products.分类 # 切块SELECT Locates.地区, Products.分类, SUM(数量)FROM Sales, Dates, Products, LocatesWHERE (Dates.季度 = 2 OR Dates.季度 = 3) AND (Locates.地区 = '江苏' OR Locates.地区 = '上海') AND Sales.Date_key = Dates.Date_key AND Sales.Locate_key = Locates.Locate_key AND Sales.Product_key = Products.Product_keyGROUP BY Dates.季度, Locates.地区, Products.分类






2. 旋转(Pivot)



旋转就是指改变报表或页面的展示方向。
对于使用者来说,就是个视图操作,而从SQL模拟语句的角度来说,就是改变SELECT后面字段的顺序而已。
下图逻辑上展示了旋转操作:




3. 上卷和下钻




上卷可以理解为"无视"某些维度;
下钻则是指将某些维度进行细分。
下图逻辑上展示了上卷和下钻操作:


数据仓库的ETL、OLAP和BI应用



这两种操作的SQL模拟语句如下,主要是对GROUP BY语句做工作:


















# 上卷SELECT Locates.地区, Products.分类, SUM(数量)FROM Sales, Products, LocatesWHERE Sales.Locate_key = Locates.Locate_keyAND Sales.Product_key = Products.Product_keyGROUP BY Locates.地区, Products.分类 # 下钻SELECT Locates.地区, Dates.季度, Products.分类, SUM(数量)FROM Sales, Dates, Products, LocatesWHERE Sales.Date_key = Dates.Date_keyAND Sales.Locate_key = Locates.Locate_keyAND Sales.Product_key = Products.Product_keyGROUP BY Dates.季度.月份, Locates.地区, Products.分类



 4. 其他OLAP操作





除了上述的几个基本操作,不同的OLAP工具也会提供自有的OLAP查询功能,如钻过,钻透等,本文不一一进行讲解。
通常一个复杂的OLAP查询是多个这类OLAP操作叠加的结果。









▍OLAP的架构模式


1. MOLAP


 MOLAP架构会生成一个新的多维数据集,也可以说是构建了一个实际数据立方体。
其架构如下图所示:


数据仓库的ETL、OLAP和BI应用



在该立方体中,每一格对应一个直接地址,且常用的查询已被预先计算好。
因此每次的查询都是非常快速的,但是由于立方体的更新比较慢,所以是否使用这种架构得具体问题具体分析。





2. ROLAP





ROLAP架构并不会生成实际的多维数据集,而是使用星形模式以及多个关系表对数据立方体进行模拟。
其架构如下图所示:




显然,这种架构下的查询没有MOLAP快速。
因为ROLAP中,所有的查询都是被转换为SQL语句执行的。
而这些SQL语句的执行会涉及到多个表之间的JOIN操作,没有MOLAP速度快。




3. HOLAP





这种架构综合参考MOLAP和ROLAP而采用一种混合解决方案,将某些需要特别提速的查询放到MOLAP引擎,其他查询则调用ROLAP引擎。




笔者发现一个有趣的现象,很多工具的发展都满足这个规律:
工具A被创造,投入使用后发现缺点;
然后工具B为了弥补这个缺点而被创造,但是带来了新的缺点;
然后就会用工具C被创造,根据不同情况调用A和B。
比较无语......






小结


本文是数据仓库系列的最后一篇。一路下来,读者有木有发现数据仓库系统的开发是一个非常浩大的工程呢?


确实,整个数据仓库系统的开发会涉及到各种团队:
数据建模团队,业务分析团队,系统架构团队,平台维护团队,前端开发团队等等。
对于志在从事这方面工作的人来说,需要学习的还有很多。
但对于和笔者一样志在成为一名优秀"数据科学家"的人来说,这些数据基础知识已经够用了。
笔者看来,数据科学家的核心竞争优势在三个方面:
数据基础,数据可视化,算法模型。
这三个方面需要投入的时间成本递增,而知识的重要性递减。
因此,数据库系列和数据仓库系列是性价比最高的两个系列哦。






【END】












往期精彩回顾












































推荐阅读
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • flowable工作流 流程变量_信也科技工作流平台的技术实践
    1背景随着公司业务发展及内部业务流程诉求的增长,目前信息化系统不能够很好满足期望,主要体现如下:目前OA流程引擎无法满足企业特定业务流程需求,且移动端体 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文讨论了在数据库打开和关闭状态下,重新命名或移动数据文件和日志文件的情况。针对性能和维护原因,需要将数据库文件移动到不同的磁盘上或重新分配到新的磁盘上的情况,以及在操作系统级别移动或重命名数据文件但未在数据库层进行重命名导致报错的情况。通过三个方面进行讨论。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle10g备份导入的方法及注意事项
    本文介绍了使用Oracle10g进行备份导入的方法及相关注意事项,同时还介绍了2019年独角兽企业重金招聘Python工程师的标准。内容包括导出exp命令、删用户、创建数据库、授权等操作,以及导入imp命令的使用。详细介绍了导入时的参数设置,如full、ignore、buffer、commit、feedback等。转载来源于https://my.oschina.net/u/1767754/blog/377593。 ... [详细]
author-avatar
停留的烟蒂_984
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有