ETL是对数据进行抽取、转换和装载的过程,是共享或合并一个或一个以上的企业应用数据,创建具有更多功能的数据应用过程。通过了解常用的ETL工具Kettle及其基本概念,使读者熟悉Kettle的功能构成、特点和应用场景,更好地认识ETL的作用和特点。
(1)了解ETL的基本概念。
(2)了解ETL的常用工具。
(3)熟悉Kettle的优点。
ETL的3个字母分别代表Extract(抽取)、Transform(转换)和Load(装载)。ETL不仅仅是对一个企业部门、一个应用系统数据的简单整理,更是跨部门、跨系统的数据整合处理。ETL在企业数据模型的基础上,构建合理的数据存储模式,建立企业的数据交换平台,满足各个应用系统之间的数据交换需求,提供全方位的数据服务,并满足企业决策的数据支持需求。
ETL原本是作为构建数据仓库的一个环节,负责将分布的、异构数据源中的数据,如关系数据、平面数据文件等抽取至临时中间层后进行清洗、转换、集成,最后加载至数据仓库或数据集市中,成为联机分析处理、数据挖掘的基础。现在,ETL也越来越多地应用于信息系统中数据的迁移、交换和同步等场景中。
ETL主要包括数据抽取、数据转换、数据装载3部分内容,具体如下。
(1)数据抽取:从数据源端的系统中,抽取目标端系统需要的数据。
(2)数据转换:将从数据源端获取的数据按照业务需求,转换成目标端要求的数据形式,并对错误、不规范、不一致的数据(俗称“脏”数据)进行清洗和加工。
(3)数据装载:将转换后的数据装载到指定数据库或文件中。
ETL的主要环节是数据抽取、数据转换与加工、数据装载。为了实现这些功能,各个ETL工具一般会进行一些功能上的扩充,例如,工作流、调度引擎、规则引擎、脚本支持、统计信息等。ETL采用的技术如下。
(1)数据抽取
数据抽取是从数据源中抽取数据的过程。在实际业务中,数据主要存储在数据库中。从数据库中抽取数据一般有以下两种方式。
①全量抽取:类似于数据迁移或数据复制,它将数据源中的表或视图的数据,原封不动地从数据库中抽取出来,并转换成ETL工具可以识别的格式。
②增量抽取:只抽取自上一次抽取以来,数据库中要抽取的表中新增或修改的数据。在ETL使用过程中,相比于全量抽取,增量抽取的应用范围更广。如何捕获变化的数据是增量抽取的关键。
对于捕获方法,有两点要求:第一是准确性,将业务系统中的变化数据,按一定的频率准确地捕获到;第二是性能,不能对业务系统造成太大的压力,从而影响现有业务。
增量数据抽取中,常用的捕获变化数据的方法如表1-1所示。
表1-1 增量数据抽取常用的捕获变化数据的方法
续表
此外,除了数据库外,ETL抽取的数据还可能是文件,例如,TXT文件、CSV文件、Excel文件和XML文件等。对于文件数据的抽取,一般是进行全量抽取,一次抽取前可保存文件的时间戳或计算文件的MD5校验码,下次抽取时进行比对,如果时间戳或计算文件的MD5校验码相同,那么可忽略本次抽取。
(2)数据转换和加工
从数据源中抽取的数据,不一定完全满足业务要求,如数据格式不一致、数据输入错误、数据不完整等,因此有必要对抽取出的数据进行数据转换和加工。
①ETL引擎中的数据转换和加工。ETL引擎中一般以组件化的方式实现数据转换。常用的数据转换组件有字段映射、数据过滤、数据清洗、数据替换、数据计算、数据验证、数据加解密、数据合并、数据拆分等。这些组件可以任意组合,各组件之间通过数据总线共享数据。
有些ETL工具还提供了脚本支持,读者可以以一种编程的方式定制数据的转换和加工操作。
②在数据库中进行数据加工。关系数据库本身已经提供了强大的SQL和函数支持数据的加工,如在SQL查询语句中添加where条件进行过滤,查询重命名字段名与目的表进行映射,以及substr函数、case条件判断等。
相比在ETL引擎中进行数据转换和加工,直接在SQL语句中进行转换和加工更加简单清晰,性能更高,对于SQL语句无法处理的数据,可以交由ETL引擎处理。
(3)数据装载
数据装载是将转换和加工后的数据装载到指定数据库或文件的过程,是ETL的最后步骤。装载数据的最佳方法取决于所执行操作的类型以及需要装入多少数据。当需要将数据装载至数据库时,有以下两种装载方式。
①直接使用SQL语句进行插入、更新、删除操作。
②采用批量装载方法,如BCP(导出)、BULK(导入)、关系数据库特有的批量装载工具或API。
多数情况下使用第一种方法,但针对大数据时,批量装载方法的优化更好,效率更高。
根据不同的供应商可将ETL工具分为两种,一种是数据库厂商自带的ETL工具,如甲骨文数据仓库生成器(Oracle Warehouse Builder,OWB)、甲骨文数据生成器(Oracle Data Integrator,ODI)。另一种是第三方工具提供商,如Kettle、Informatica。开源世界中,也有很多的ETL工具,功能各异,强弱不一。
(1)Oracle Data Integrator
甲骨文数据生成器(Oracle Data Integrator,ODI)前身是Sunopsis公司的数据集成平台(Active Integration Platform),其在2006年底被Oracle收购,整合并重新命名为Oracle Data Integrator,适用于ETL和数据集成的场景。与Oracle原来的ETL工具OWB相比,ODI有一些显著的特点,比如:虽然ODI和OWB一样都是ELT架构,但是ODI比OWB支持更多的异构的数据源;ODI提供了调用Web服务的机制,并且ODI的接口也可以为Web提供服务,支持和面向服务框架(SOA)环境进行交互;ODI能够检测事件,一个事件可以触发ODI的一个接口流程,从而完成近乎实时的数据集成。
ODI主要功能有以下特点。
①使用CDC作为变更数据捕获的捕获方式。
②代理支持并行处理和负载均衡。
③完善的权限控制、版本管理功能。
④支持数据质量检查,清洗和回收脏数据。
⑤支持与Java信息服务(Java Message Service,JMS)消息中间件集成。
⑥支持Web服务。
(2)SQL Server Integration Services
微软数据集成器(SQL Server Integration Services,SSIS)是SQL Server 2005的新成员。在SQL Server的早期版本中,其实已经有了SSIS的雏形,那时SSIS的名称为数据转换服务(DTS)。在SQL Server 2005的前两个版本SQL Server 7.0和SQL Server 2000中,DTS主要负责提取和加载。通过使用DTS,可以从任何数据源中提取数据并装载至其他数据库或文件中。SQL Server 2005对DTS进行了重新设计和改进,从而形成了SSIS。SSIS提供了数据相关的控制流、数据流、日志、变量、事件、连接管理等基础设施。控制流也称为工作流或任务流,它更像工作流,在工作流中每个组件都是一个任务。这些任务是按预定义的顺序执行的。任务流中可能有分支,当前任务的执行结果决定沿哪条分支前进。数据流是新的概念。数据流也称为流水线,主要解决数据转换的问题。数据流由一组预定义的转换操作组成。数据流的起点通常是数据源(源表);数据流的终点通常是数据的目的地(目标表)。可以将数据流的执行认为是一个流水线的过程。在该过程中,每一行数据都是装配线中需要处理的零件,而每一个转换都是装配线中的处理单元。
(3)Kettle
Kettle是Pentaho数据集成器(Pentaho Data Integration,PDI)的前身,由于Kettle已经被广大开发者接受,所以从业者都习惯性地把PDI也称为Kettle。Kettle是“Kettle E.T.T.L. Environment”的首字母缩写,表示抽取、转换、装入和加载数据,翻译成中文是水壶的意思,希望把各种数据放到一个壶里,像水一样,以一种指定的格式流出,表达数据流的含义。
Kettle的主要作者是马特·卡斯特尔(Matt Casters),他在2003年开始了Kettle工具的开发。Kettle在2006年初加入了开源的Pentaho公司,并正式命名为Pentaho Data Integration,之后PDI的发展越来越快,关注的人也越来越多。自2017年9月20日起,Pentaho被日本日立集团下的新公司Hitachi Vantara合并。
Kettle常见用途有以下5个方面。
①不同数据库和应用程序之间的数据迁移。
②充分利用云、集群和大规模并行处理环境,将大量数据集加载至数据库中。
③通过从非常简单到非常复杂的转换步骤进行数据清理。
④数据集成,包括利用实时ETL作为报表数据源的能力。
⑤内置支持缓慢变化的维度和代理键创建的数据仓库填充。
在数据整合和处理中,选择ETL工具,通常考虑以下6个方面的因素。
(1)对平台的支持程度。
(2)对数据源的支持程度。
(3)抽取和装载的性能是不是较高,且对业务系统的性能影响大不大,倾入性高不高。
(4)数据转换和加工的功能强不强。
(5)是否具有管理和调度功能。
(6)是否具有良好的集成性和开放性。
Kettle是业界最受欢迎、使用人数最多和应用范围最广泛的ETL数据整合工具之一,深受用户的喜爱。相比于其他主流的ETL工具,Kettle的优势如表1-2所示。
表1-2 Kettle的优势
Kettle由以下4个部分功能组成。
(1)SPOON:用户通过图形界面来设计ETL转换过程。
(2)PAN:允许用户使用时间调度器,批量运行由SPOON设计的ETL转换。PAN是一个后台执行的程序,以命令行方式执行转换,没有图形界面。
(3)CHEF:允许用户创建Job(作业)任务。作业任务通过设置的转换、任务和脚本等,来进行自动化更新数据仓库等复杂工作。
(4)KITCHEN:允许用户批量使用由CHEF设计的任务,如使用一个时间调度器,由时间触发执行相应的任务。KITCHEN也是一个后台运行的程序,以命令行方式执行作业任务。
作为广受用户欢迎的ETL工具,Kettle具有以下特点。
(1)开源软件,可以在多个常用的操作系统下运行。
(2)图形化操作,使用十分简单与方便。
(3)支持多种常用数据库和文件的数据格式,适应范围广。
(4)具有完整的工作流控制,能够较好地控制复杂的数据转换工作。
(5)提供定时调度功能,方便用户及时处理数据。
ETL属于偏底层的数据基础性工作,应用场景很多。从模式上划分,Kettle主要有以下3种应用场景。
(1)表视图模式。在同一网络环境下,对各种数据源的表数据进行抽取、过滤、清洗等,如历史数据同步、异构系统数据交互、数据发布或备份等都归属于表视图模式。
(2)前置机模式。前置机模式是典型的数据交换应用场景。以数据交换的A方和B方为例,A和B双方的网络不通,但是A和B都可以与前置机C进行连接,双方约定好前置机的数据结构,这个结构与A和B的数据结构基本上是不一致的,用户把应用数据按照数据标准推送到前置机上。以此类推,同样可以处理三方及以上的数据交换。
(3)文件模式。以数据交换的A和B方为例,A和B双方在物理上完全隔离,只能通过文件的方式来进行数据交互。文件类型有多种,如TXT、Excel、SQL和CSV等文件类型,在A方应用中开发一个接口用于生成标准格式的CSV文件,然后用USB盘或其他介质在某一时间复制文件,接入到B方的应用上,在B方上按照标准接口解析相应的文件,并接收数据。以此类推,同样可以处理三方及以上的文件。
ETL的数据处理过程主要包括数据初始化、迁移、同步、清洗、导入导出等步骤。从过程上划分,Kettle有以下5种应用场景。
(1)数据初始化。数据初始化是导入基础类数据,此时的数据可能有多种,如文本文件数据、从其他数据库中获取的数据、从Web服务中获取的数据等,数据经过处理后写入目标数据库中。初始化场景的关注点在于多种数据源。
(2)数据迁移。将某些数据迁移至另一个地方或几个地方。
(3)数据同步。数据同步是指将数据实时(较短时间内)同步至另一个提供查询或统计功能的数据库中。
(4)数据清洗。强调数据清洗过程,数据会经过校验、去重、合并、删除、计算等处理。
(5)导入导出。将经过清洗处理的数据导入导出到数据库或文件中。