ETL是Extract、Transform、Load三个单词首字母的简写,ETL是建立数据仓库最重要的处理过程,也是工作量最大的过程,一般会占到整个项目一般以上工作量。
- 抽取:从操作型数据库获取数据
- 转换:转换数据,使之转变为适用于查询和分析的形式和结构
- 装载:将转换后的数据导入到最终的目标数据仓库
建立数据仓库,就是要把来自于多个异构的源系统的数据集成在一起,放置于一个集中的位置用于数据分析。ETL的工作就是要把异构的数据转换成同构的。
1.数据抽取
抽取操作从源系统获取数据给后续数据仓库环境使用。源系统可能很复杂且缺少相应文档,因此只是需要决定抽取哪些数据就已经非常困难。通常数据都不只抽取一次,而是需要以 一定时间间隔反复抽取,通过这种方式把数据所有变化提供给数据仓库,并保持数据的及时性。此外,源系统不允许外部系统对其进行修改,也不允许外部系统对其性能和可用性产生影响,抽取要能满足这样的需求。下面从逻辑和物理两方面介绍数据抽取方法。
1.1 逻辑抽取
有两种类型:全量抽取和增量抽取。
(1)全量抽取
源系统的数据全部被抽取。不需要跟踪自上次成功抽取以来的数据变化。源系统只需要原样提供现有数据而不需要附加逻辑信息(比如时间戳)。
(2)增量抽取
只抽取某个事件发生的特定时间点之后的数据。通过该事件发生的时间可以反映出数据的历史变化。必须能标识出特定时间点后所有的数据变化
1.2 物理抽取
依赖于选择的逻辑抽取方法和能够对源系统所做的操作和所受的限制,存在两种物理抽取机制:直接从源系统联机抽取或间接从一个脱机结构抽取数据。
(1)联机抽取
数据直接从源系统抽取。抽取进程或者直连源系统数据库,访问它们的数据表,或者连接到一个存储快照日志或变更记录表的中间层系统。
(2)脱机抽取
数据不从源系统直接抽取,而是从一个源系统以外的过渡区抽取。过渡区可能已经存在(例如数据库备份文件、关系数据库系统的重做日志、归档日志等),或者抽取程序自己建立。
1.3 变化数据捕获
抽取处理需要重点考虑增量抽取,也被称为变化数据捕获,简称CDC。变化数据捕获是建立准实时数据仓库的关键技术。
告警(生产环境)当能够识别获取最近变化的数据时,抽取及其后面的转换、装载操作显然会变得更高效,因为要处理的数据量会小很多。
常用的变化数据捕获方法有时间戳、快照、触发器和日志四种。时间戳方法需要源系统有相应的数据列表示最后的数据变化。快照方法可以使用数据库系统自带的机制实现,如Oracle的物化视图技术;触发器是关系数据库系统具有的特性,源表上建立的触发器会在对该表执行insert、update、delete等语句时被触发,触发器中的逻辑用语捕获数据的变化;日志可以使用应用日志或系统日志,这种方式对源系统不具有侵入性,但需要额外的日志解析工作。
2.数据转换
数据从操作性源系统获取后,需要进行多种转换操作。如统一数据类型、处理拼写错误、消除数据歧义、解析为标准格式等。数据转换通常是最复杂的部分,也是ETL中用时最长的一步。
数据转换一个最重要的功能是清洗数据,目的是只有“合规”的数据才能进入目标数据仓库。
3.数据装载
ETL的最后步骤是把转换后的数据装载进目标数据仓库。这步需要考虑两个关键问题:一是数据装载的效率问题,二是一旦装载过程中途失败了,如何再次重复执行装载过程。
要加快装载效率,加快装载速度,可以从以下几方面入手:
(1)保证足够的系统资源,独占资源,不要与别的系统共用
(2)进行数据装载时,要禁用数据库约束(唯一性、非空性、检查约束等)和索引,装载过程结束后,再启动约束,重建索引。
网友评论