数据仓库基础(二)ETL
本文转载自:http://www.cnblogs.com/evencao/archive/2013/06/14/3135529.html
ETL在数据仓库中具有以下的几个特点:
数据流动具有周期性:
因为数据仓库中的数据量巨大,一般采用成熟的ETL工具去完成抽取、转换、加载,以降低设计开发的和维护的复杂度,使设计开发人员有更多的时间去专注于业务转化规则。
ETL是数据抽取、转换、加载的简写。它的一般过程是将数据源抽取出来,中间经过数据的清洗、转换,最后加载到目标表中。ETL的过程一般是批量的。
ETL的本质
1.用户应该理解ETL本质上就是数据从源到目标的过程。
2.大多数的ETL工具价格昂贵,宏观上一般都适合处理海量的数据,但是在微观上需要考虑ETL处理的不同情况。
3.元数据时ETL过程的重要体现,藐视了数据源的属性、数据源到目标库的转换规则,数据抽取历史记录等。
4.构建一个商业智能系统,设计开发人员更多的人喜欢在ETL开始之前先将所有的业务规则弄清楚。
影响ETL数据质量的关键因素:
- 可能会有一部风数据因为客观或者人为的原因到时数据格式混乱。
- 源系统设计存在不合理性
- 在开发过程中,因为开发人员的错误或者设计人员对业务规则描述的问题,同样会导致数据质量出现问题。
保证数据质量的方法:
首先用户必须遵守数据仓库项目中的数据源的质量要求,对业务源数据进行仔细分析,以便对数据源的任何错误或不规范的地方有相应的处理方法,如对错误进行修改或者舍弃
其次,在保证数据源的质量之后,在设计ETl过程中,对每一个步骤应该有一个衡量数据质量的方法,需要重视ETL的每一个过程。
最后,就是规范业务流程,保证ETL正确性,避免误删或者重复加载数据。
其中对质量的衡量有几种方式:
- 1.定义的数据是否和实际值相同。
- 2.指标数据是否符合业务规则。
- 3.数据是否和业务源系统中的信息保持一致。
- 4.数据时违背自然规律或者不符合常理。
主流的ETL工具有 Informatica PowerCenter 和 Datastage。ETL 是商业智能的核心和灵魂。
详解ETL过程:
1.数据抽取
数据抽取就是从源系统中获取业务数据的过程。数据抽取时需要考虑很多的因素,(抽取时间,收取方式,抽取周期等)数据抽取有以下几种情况:
(1)如果业务操作系统数据库和数据仓库质检的数据库管理系统完全相同,只需要建立相应的连接关系就可以使用ETL工具直接访问,或者调用相应的SQL语句或者存储过程。
(2)若数据仓库系统和业务操作型数据库的数据管理器不相同,比较简单的方式是使用ETL工具导出成文本文件或者Execl文件,然后再进行统一的数据抽取。
(3)如果需要抽取的数据量非常的庞大,此时必须考虑增量抽取。
2.数据清洗
数据清洗就是选择出有缺陷的数据,然后再将他们正确话和规范化,从而达到用户要求的数据质量标准。
3.数据转换
数据转换就是指从业务系统中抽取的源数据,然后再根据数据仓库模型的需求,进行一系列数据转换的过程。
数据转换是ETL过程中复杂度最高的过程,包括对数据不一致性的转换,业务指标的计算和某些数据的汇总,为决策系统提供数据支持。
ETL转换过程中可能包含几个方面:
- 对空值进行处理:在进行加载是需要将空值替换成某一数据或者直接进行加载。
- 对数据格式规范化:例如:统一将数值型转化为字符型
- 根据业务需求进行字段的拆分和合并
- 对缺失数据的替换:
- 根据业务规则对数据进行过滤
- 根据编码表进行数据唯一性的转换:
4.数据加载:
这是ETL的最后一笔,需要保证加载工具必须有高效的性能去完成数据加载,同时还需要考虑加载的时周期和数据加载的策略。
数据加载包括:
时间戳的加载方式,是比较常见的一种加载方式。
全表对比的加载方式、通过读取日志进行加载的方式、全表删除后再进行加载的方式。
5.ETL日志
ETL日志非常重要,它记录了ETL执行过程中的每一步信息。帮助系统维护人员进行监控,当然ETL日志也可以未做数据加载的一个策略。
ETL设计的规范要点:
1.在ETL设计之前,需要根据业务的需求确定所要分析的主题和数据结构。根据数据仓库的模型,考虑在ETL设计中是否增加预留字段和属性。
2.确定数据的粒度
3.ETL抽取周期的确定。
4.以增量抽取的方式作为ETL设计的重点,减少数据抽取的压力和抽取时间。
5.通常抽取盒清洗可以分成很多步骤
6.对异常情况进行处理。包括网络中断等情况进行处理,保证数据的正确性。
7.对ETL的运行管理和监控措施。
ETL的框架结构:
主要包括:ETL调度、抽取策略、转换策略、加载策略。
统一调度室ETL中较为重要的功能。
1.自动调度方式
2.手动调度方式
数据仓库基础(二)ETL的更多相关文章
- 一脸懵逼学习Hive(数据仓库基础构架)
Hive是什么?其体系结构简介*Hive的安装与管理*HiveQL数据类型,表以及表的操作*HiveQL查询数据***Hive的Java客户端** Hive的自定义函数UDF* 1:什么是Hive(一 ...
- 数据仓库系列之ETL中常见的增量抽取方式
为了实现数据仓库中的更加高效的数据处理,今天和小黎子一起来探讨ETL系统中的增量抽取方式.增量抽取是数据仓库ETL(数据的抽取(extraction).转换(transformation)和装载(lo ...
- Python全栈开发【基础二】
Python全栈开发[基础二] 本节内容: Python 运算符(算术运算.比较运算.赋值运算.逻辑运算.成员运算) 基本数据类型(数字.布尔值.字符串.列表.元组.字典) 其他(编码,range,f ...
- Bootstrap <基础二十九>面板(Panels)
Bootstrap 面板(Panels).面板组件用于把 DOM 组件插入到一个盒子中.创建一个基本的面板,只需要向 <div> 元素添加 class .panel 和 class .pa ...
- Bootstrap <基础二十八>列表组
列表组.列表组件用于以列表形式呈现复杂的和自定义的内容.创建一个基本的列表组的步骤如下: 向元素 <ul> 添加 class .list-group. 向 <li> 添加 cl ...
- Bootstrap<基础二十七> 多媒体对象(Media Object)
Bootstrap 中的多媒体对象(Media Object).这些抽象的对象样式用于创建各种类型的组件(比如:博客评论),我们可以在组件中使用图文混排,图像可以左对齐或者右对齐.媒体对象可以用更少的 ...
- Bootstrap <基础二十六>进度条
Bootstrap 进度条.在本教程中,你将看到如何使用 Bootstrap 创建加载.重定向或动作状态的进度条. Bootstrap 进度条使用 CSS3 过渡和动画来获得该效果.Internet ...
- Bootstrap <基础二十五>警告(Alerts)
警告(Alerts)以及 Bootstrap 所提供的用于警告的 class.警告(Alerts)向用户提供了一种定义消息样式的方式.它们为典型的用户操作提供了上下文信息反馈. 您可以为警告框添加一个 ...
- Bootstrap<基础二十四> 缩略图
Bootstrap 缩略图.大多数站点都需要在网格中布局图像.视频.文本等.Bootstrap 通过缩略图为此提供了一种简便的方式.使用 Bootstrap 创建缩略图的步骤如下: 在图像周围添加带有 ...
- Bootstrap <基础二十三>页面标题(Page Header)
页面标题(Page Header)是个不错的功能,它会在网页标题四周添加适当的间距.当一个网页中有多个标题且每个标题之间需要添加一定的间距时,页面标题这个功能就显得特别有用.如需使用页面标题(Page ...
随机推荐
- A simple guide to 9-patch for Android UI
extends:http://radleymarx.com/blog/simple-guide-to-9-patch/ While I was working on my first Android ...
- Rsync数据同步应用指南
1.软件简介 Rsync 是一个本地或远程数据同步工具,基于RSync算法,这个算法是澳大利亚人Andrew Tridgell发明的:可通过 LAN/WAN 快速同步多台主机间的文件.Rsync 本来 ...
- 最简单,最实用的数据库CHM文档生成工具——DBCHM
DBCHM支持SqlServer/MySql/Oracle/PostgreSQL等数据库的表列批注维护管理. DBCHM有以下几个功能 表,列的批注可以编辑保存到数据库. 表,列的批注支持通过pdm文 ...
- opencv学习笔记——时间计算函数getTickCount()和getTickFrequency()
cv::getTickCount()可以用来测量一段代码的运行时间,这个函数返回从上次开机算起的时钟周期数. 由于我们需要的是某个代码段运行的毫秒数,因此还需要另一个函数cv::getTickFreq ...
- HDU 2829 - Lawrence - [斜率DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2829 T. E. Lawrence was a controversial figure during ...
- hadoop HA架构安装部署(QJM HA)
###################HDFS High Availability Using the Quorum Journal Manager########################## ...
- 使用 Python 进行 socket 编程
本文主要参考 https://docs.python.org/3/howto/sockets.html . 本文只讨论 STREAME(比如 TCP) INET(比如 IPv4) socket. 在多 ...
- 牛客练习赛18E pocky游戏 状压dp
正解:状压dp+辅助dp 解题报告: 来还债辣!NOIp之后还是轻松很多了呢,可以一点点儿落实之前欠下的各种东西一点点提升自己!加油鸭! 是个好题,可以积累套路,启发性强,而且很难 哦而且状压它也是个 ...
- 对Django框架架构和Request/Response处理流程的分析(转)
原文:http://blog.sina.com.cn/s/blog_8a18c33d010182ts.html 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组 ...
- Python3学习之路~2.3 字符串操作
字符串操作 特性:不可修改 name="my \tname is alex" print(name.capitalize()) #首字母变大写 print('Alex LI'.ca ...