一文讲清数据仓库ETL搭建全流程!附ETL工具

2024-09-06

来源: 数据学堂


ETL一词是Extract、Transform、Load三个英文单词的首字母缩写,中文意为抽取、转换、装载。

1.  抽取(Extract):从多个异构数据源(如数据库、文件、API等)提取数据。这些源系统的数据可能格式各异,结构不同。

2.  转换(Transform):将提取的数据进行清洗和转换,确保数据格式和结构的一致性。这个过程包括数据清洗、数据合并、数据汇总和数据格式转换等,以便于后续的分析和报告。

3.  装载(Load):将转换后的数据加载到数据仓库或数据存储系统中。这一步骤确保数据以适当的形式和结构存储在目标系统中,便于查询和分析。

图片

ETL过程对于数据仓库至关重要,因为它将来自不同源的数据整合到一个统一的结构中,使得数据分析和决策支持变得更加高效和可靠。通过ETL,可以确保数据的质量和一致性,从而提高数据分析的准确性和有效性。


数仓架构中的ETL

可以把数据仓库架构理解成构成数据仓库的组件及其之间的关系,那么就有了下面的数据仓库架构图。

图片

图中显示的整个数据仓库环境包括操作型系统和数据仓库系统两大部分。操作型系统的数据由各种形式的业务数据组成,这其中可能包含关系数据库、TXT或CSV文件、HTML或XML文档,还可能存在外部系统的数据,比如网络爬虫抓取来的互联网数据等。数据可能是结构化、半结构化或非结构化的。这些数据经过ETL过程进入数据仓库系统。


这里把ETL分成了抽取和转换装载两个部分。抽取过程负责从操作型系统获取数据,该过程一般不做数据聚合和汇总,但是会按照主题进行集成,物理上是将操作型系统的数据全量或增量复制到数据仓库系统的RDS中。


转换装载过程将数据进行清洗、过滤、汇总、统一格式化等一系列转换操作,使数据转为适合查询的格式,然后装载进数据仓库系统的TDS中。传统数据仓库的基本模式是用一些过程将操作型系统的数据抽取到文件,然后另一些过程将这些文件转化成MySQL或Oracle这样的关系数据库的记录。最后,第三部分过程负责把数据导入进数据仓库。


数据抽取


抽取操作是ETL处理的第一步,关键在于从源系统获取数据,确保后续转换和装载步骤顺利进行。数据仓库的源系统通常是事务处理应用,如销售订单录入系统,这些系统包含了所有相关记录。


设计和建立数据抽取过程通常耗时且复杂,源系统可能缺乏文档且结构复杂。数据抽取需要周期性进行,以保持数据的及时性,且必须不影响源系统的性能或可用性。选择抽取方法时需根据源系统和目标数据仓库的需求进行,通常不允许在源系统中增加额外的逻辑或负担。接下来,将从逻辑和物理两方面介绍数据抽取方法。


(1)逻辑抽取


有两种逻辑抽取类型:全量抽取和增量抽取。


a.全量抽取


源系统的数据全部被抽取。因为这种抽取类型影响源系统上当前所有有效的数据,所以不需要跟踪自上次成功抽取以来的数据变化。源系统只需要原样提供现有的数据而不需要附加的逻辑信息(比如时间戳等)。一个全表导出的数据文件或者一个查询源表所有数据的SQL语句,都是全量抽取的例子。


b.增量抽取


只抽取某个事件发生的特定时间点之后的数据。通过该事件发生的时间顺序能够反映数据的历史变化,它可能是最后一次成功抽取,也可能是一个复杂的业务事件,如最后一次财务结算等。必须能够标识出特定时间点之后所有的数据变化。这些发生变化的数据可以由源系统自身来提供,例如能够反映数据最后发生变化的时间戳列,或者是一个原始事务处理之外的,只用于跟踪数据变化的变更日志表。大多数情况下,使用后者意味着需要在源系统上增加数据抽取逻辑。


在许多数据仓库中,抽取过程不含任何变化数据捕获技术。取而代之的是,把源系统中的整个表抽取到数据仓库过渡区(Staging Area),然后用这个表的数据和上次从源系统抽取得到的表数据作比对,从而找出发生变化的数据。虽然这种方法不会对源系统造成很大的影响,但显然需要考虑给数据仓库处理增加的负担,尤其是当数据量很大的时候。

图片

(2)物理抽取


依赖于选择的逻辑抽取方法,还有能够对源系统所做的操作和所受的限制,存在两种物理数据抽取机制:直接从源系统联机抽取或者间接从一个脱机结构抽取数据。这个脱机结构有可能已经存在,也可能得需要由抽取程序生成。


a.联机抽取


数据直接从源系统抽取。抽取进程或者直连源系统数据库访问它们的数据表,或者连接到一个存储快照日志或变更记录的中间层系统(如MySQL数据库的binlog)。注意这个中间层系统并不需要必须和源系统物理分离。


b.脱机抽取


数据不从源系统直接抽取,而是从一个源系统以外的过渡区抽取。过渡区可能已经存在(例如数据库备份文件、关系数据库系统的重做日志、归档日志等),或者抽取程序自己建立。


(3)变化数据捕获


抽取处理需要重点考虑增量抽取,也被称为变化数据捕获(Change Data Capture,CDC)。假设一个数据仓库系统,在每天夜里的业务低峰时间从操作型源系统抽取数据,那么增量抽取只需要过去24小时内发生变化的数据。变化数据捕获也是建立准实时数据仓库的关键技术。

图片

当能够识别并获得最近发生变化的数据时,抽取及其后面的转换、装载操作显然都会变得更高效,因为要处理的数据量会小很多。遗憾的是,很多源系统很难识别出最近变化的数据,或者必须侵入源系统才能做到。变化数据捕获是数据抽取中典型的技术挑战。


常用的变化数据捕获方法有时间戳、快照、触发器和日志四种。相信熟悉数据库的用户对这些方法都不会陌生。时间戳方法需要源系统有相应的数据列表示最后的数据变化。快照方法可以使用数据库系统自带的机制实现,如Oracle的物化视图技术,也可以自己实现相关逻辑,但会比较复杂。触发器是关系数据库系统具有的特性,源表上建立的触发器会在对该表执行insert、update、delete等语句时被触发,触发器中的逻辑用于捕获数据的变化。日志可以使用应用日志或系统日志,这种方式对源系统不具有侵入性,但需要额外的日志解析工作。


数据转换 


数据从操作型源系统获取后,需要进行多种转换操作。如统一数据类型、处理拼写错误、消除数据歧义、解析为标准格式等等。数据转换通常是最复杂的部分,也是ETL开发中用时最长的一步。数据转换的范围极广,从单纯的数据类型转化到极为复杂的数据清洗技术。


在数据转换阶段,为了能够最终将数据装载到数据仓库中,需要在已经抽取来的数据上应用一系列的规则和函数。有些数据可能不需要转换就能直接导入到数据仓库。


数据转换一个最重要的功能是清洗数据,目的是只有“合规”的数据才能进入目标数据仓库。这步操作在不同系统间交互和通信时尤其必要,例如,一个系统的字符集在另一个系统中可能是无效的。另一方面,由于某些业务和技术的需要,也需要进行多种数据转换。


数据装载 


ETL的最后步骤是将转换后的数据装载到目标数据仓库中,这一步骤需关注两个主要问题:装载效率和失败后的重试机制


● 提高装载效率

1. 系统资源:确保有足够的系统资源。数据仓库需要高性能的服务器,并且应独占资源,避免与其他系统共享。

2. 禁用约束和索引:在装载过程中,禁用数据库的约束(如唯一性、非空性)和索引,待装载完成后再重新启用并重建索引。这可以显著提高装载速度。

3. 参考完整性:一般不使用数据库的外键约束来保证数据的完整性,而是由ETL工具或程序来维护。


● 处理装载失败

1. 记录失败点:装载失败时,记录失败点,以便在重新执行时只装载失败的部分。

2. 数据更新:如果装载后数据发生变化(如新增或更新数据),需要重新装载过程。


最终,装载到数据仓库的数据将经过汇总、聚合处理,并交付给多维立方体、数据可视化、仪表盘等工具进行进一步分析。


ETL工具介绍 


图片


DataStage

IBM WebSphere DataStage(下面简称 DataStage )是一套专门对多种操作数据源的数据抽取、转换和维护过程进行简化和自动化,并将其输入数据集市或数据仓库目标数据库的集成工具,可以从多个不同的业务系统中,从多个平台的数据源中抽取数据,完成转换和清洗,装载到各种系统里面。

其中每步都可以在图形化工具里完成,同样可以灵活地被外部系统调度,提供专门的设计工具来设计转换规则和清洗规则等,实现了增量抽取、任务调度等多种复杂而实用的功能。

其中简单的数据转换可以通过在界面上拖拉操作和调用一些 DataStage 预定义转换函数来实现,复杂转换可以通过编写脚本或结合其他语言的扩展来实现,并且 DataStage 提供调试环境,可以极大提高开发和调试抽取、转换程序的效率。

图片

Datastage 操作界面


  • 对元数据的支持:Datastage 是自己管理 Metadata,不依赖任何数据库。

  • 参数控制:Datastage 可以对每个 job 设定参数,并且可以 job 内部引用这个参数名。

  • 数据质量:Datastage 有配套用的 ProfileStage 和 QualityStage 保证数据质量。

定制开发:提供抽取、转换插件的定制,Datastage 内嵌一种类 BASIC 语言,可以写一段批处理程序来增加灵活性。

  • 修改维护:提供图形化界面。这样的好处是直观、傻瓜式的;不好的地方就是改动还是比较费事(特别是批量化的修改)。


Datastage 包含四大部件:Administrator、Manager、Designer、Director。

  1. 用 DataStage Administrator 新建或者删除项目,设置项目的公共属性,比如权限。

  2. 用 DataStage Designer 连接到指定的项目上进行 Job 的设计;

  3. 用 DataStage Director 负责 Job 的运行,监控等。例如设置设计好的 Job 的调度时间。

  4. 用 DataStage Manager 进行 Job 的备份等 Job 的管理工作。

Informatica

Informatica PowerCenter 用于访问和集成几乎任何业务系统、任何格式的数据,它可以按任意速度在企业内交付数据,具有高性能、高可扩展性、高可用性的特点。它提供了一个可视化的、拥有丰富转换库的设计工具,这个转换库使数据转换变成一个简单的“拖拽”过程,用户不需在组件时编写脚本语言。


可以通过简单的操作,完成需求。使用 PowerCenter,转换组件能够被合并到 mapping 对象中,独立于他们的数据源和目标,有近 20 种数据转换组件和近百个函数可以调用,同时可以调用外部的过程和程序,实现复杂的转化逻辑。


图片

Informatica 操作界面


  • 对元数据的支持:元数据相对开放,存放在关系数据中,可以很容易被访问。

  • 参数控制:参数放在一个参数文件中,理论上的确可以灵活控制参数,但这个灵活性需要用户自己更新文件中的参数值(例如日期更新)。另外,Powercenter 不能在 mapping 或 session 中引用参数名。

  • 数据质量:专门有一个产品 Informatica Data Quality 来保证数据质量。

  • 定制开发:没有内嵌类 BASIC 语言,参数值需人为更新,且不能引用参数名。

  • 修改维护:与 Datastage 相同,Powercenter 也提供图形化界面。这样的好处是直观、傻瓜式的;不好的地方就是改动还是比较费事。


Informatica 的开发分为六个步骤:

  1. 定义源,就是定义我们源头数据在哪里。配置数据链接,比如 IP 账号密码等信息。

  2. 定义目标,就是我们准备把数据放到哪里。这个是我们事先定义的数据仓库。

  3. 创建映射,就是我们的元数据和目标数据的映射关系。

  4. 定义任务,就是我们每个表的转换过程,可以同时处理多个表。

  5. 创建工作流,将任务按照一定的顺序进行组合。

  6. 工作流调度和监控,定时、自动或者手动方式触发工作流。


有兴趣更详细了解的可以参考这篇文章:

https://blog.csdn.net/water_0815/article/details/76512470

Kettle

Pentaho Data Integration,是一款国外免费开源的、可视化的、功能强大的 ETL 工具。由于其开源、免费、跨平台、资料文档丰富等特点获得了一大批忠实粉丝。


Kettle 六大特点:

  • 免费开源:基于 Java 免费开源软件。

  • 易配置:可跨平台,绿色无需安装。

  • 不同数据库:ETL 工具集,可管理不同数据库的数据。

  • 两种脚本文件:transformation 和 job。transformation 完成针对数据的基础转换,job 则完成整个工作流的控制。

  • 图形界面设计:托拉拽,无需写代码。

  • 定时功能:在 Job 下的 start 模块,有一个定时功能,可以每日,每周等方式进行定时。


图片

Kettle 操作界面


Kettle 的执行分为两个层次:Job 和 Transformation。这两个层次的最主要的区别在于数据的传递和运行方式。

  • Transformation:定义对数据操作的容器,数据操作就是数据从输入到输出的一个过程,可以理解为比 Job 粒度更小一级的容器,我们将任务分解成 Job,然后需要将 Job 分解成一个或多个Transformation,每个 Transformation 只完成一部分工作。

  • Step:是 Transformation 内部的最小单元,每一个 Step 完成一个特定的功能。

  • Job:负责将 Transformation 组织在一起进而完成某一工作,通常我们需要把一个大的任务分解成几个逻辑上隔离的Job,当这几个 Job 都完成了,也就说明这项任务完成了。

  • Job Entry:Job Entry 是 Job 内部的执行单元,每一个 Job Entry 用于实现特定的功能,如:验证表是否存在,发送邮件等。可以通过 Job 来执行另一个 Job 或者 Transformation,也就是说 Transformation 和 Job 都可以作为Job Entry。

  • Hop:用于在 Transformation 中连接 Step,或者在 Job 中连接 Job Entry,是一个数据流的图形化表示。


在Kettle 中Job 的JobEntry是串行执行的,故Job中必须有一个Start的JobEntry;Transformation 中的 Step 是并行执行的。


Kettle 也提供了丰富的组件,主要分为十大类:脚本组件、映射组件、统计组件、连接组件、查询组件、流程组件、应用组件、转换组件、输出组件、输入组件。


有兴趣更详细了解的可以参考 Kettle 官方文档,很详细的:

https://www.kettle.net.cn/category/base

ODI、Data Service

ODI(Oracle Data Integrator)是 Oracle 公司提供的一种数据集成工具,能高效地实现批量数据的抽取、转换和加载。ODI 可以实现当今大多数的主流关系型数据库(Oracle、DB2、SQL Server、MySQL、SyBase)的集成。


ODI 提供了图形化客户端和 Agent(代理)运行程序。客户端软件主要用于对整个数据集成服务的设计,包括创建对数据源的连接架构、创建模型及反向表结构、创建接口、生成方案和计划等。Agent 运行程序是通过命令行方式在 ODI 服务器上启动的服务,对 Agent 下的执行计划周期性地执行。


ODI 的常见应用场景:

  • 数据仓库:比如 ETL 阶段。

  • 数据迁移:比如将某一源系统的数据迁移到新系统中。

  • 数据集成:比如两个系统间高效的点到点数据传递。

  • 数据复制:比如将一个 Instance 的数据复制另外一个 Instance 中。


SAP Data Services 软件能够提高整个企业的数据质量。利用出色的数据整合、数据质量管理和数据清理功能,你能够从企业的所有结构化和非结构化数据中挖掘价值;将数据转化为随时可用的可靠资源,从中获取业务洞察,并利用这些洞察简化流程提高效率。


传统数仓时代,DataStage 和 Informatica 占据了绝大多数市场份额,Kettle 在中小型 ETL 应用场景上也有广泛应用,ODI 和 DS 等 ETL 工具反而使用的不多。


学习内容推荐:9月重庆-关于举办首席数据官岗位能力提升高级培训班的通知

注:本文来源网络,仅做学习交流使用,版权归原作者所有,如有侵权,请联系小编删除


课程咨询:刘浩
13910395862
进入微信小程序查看更多内容
立即进入 或微信搜索【中至远大讲堂】