大数据与机器学习:实践方法与行业案例.2.3 ETL

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介:

2.3 ETL


ETL是Extract-Transform-Load的缩写,是数据的抽取、转换、加载过程,当需要将数据从一个环境转移到另一个环境时(例如从生产环境到分析环境),或者需要对数据进行进一步加工处理时(例如在分析环境中,在数据仓库基础上产出每日交易量指标),即需要借助ETL过程。

ETL是构建数据闭环自循环过程的重要途径,几乎每个环节均可以通过ETL来完成。通过专门的ETL工具,定制满足业务要求的ETL作业,并结合自动调度工具,即可以实现数据的自动循环。

2.3.1 ETL工具

目前国内商用ETL工具以IBM的Datastage为代表,该ETL工具在金融行业有广泛的应用,但Datastage价格昂贵,许多公司从成本上考虑,采用了Pentaho的开源ETL工具Kettle。

在本书成书时,尽管Kettle本身仍然存在一些Bug,但由于部署简单、使用方便并且完全免费的特点,使其成为越来越多用户的首选。

1. 开源ETL工具:Kettle

Kettle是国外的一款开源ETL工具,中文名称为水壶。在写作本书的时候,官网上最新的发布版本为Data Integration 5.4.0,下载后会得到一个pdi-ce-5.4.x.x-xxx.zip的压缩包,使用解压缩工具解压该压缩包,便可以开始使用Kettle了。

Kettle可以运行在Windows环境或者Linux环境,如果运行在Windows环境,则进入解压后的data-integration目录,可以看到Spoon.bat(Linux环境为Spoon.sh),双击Spoon.bat打开Kettle的图形界面,如图2-8所示。

 

图2-8 Kettle的图形界面

图2-8展示了Kettle的两个基本组件:转换(transformation)和作业(job)。转换用来定义数据处理的一个或多个步骤(step),如读取文件、过滤输出行、数据清洗、数据加载至目的数据库等。作业用来将多个定制完成的转换串接起来,使转换能够按照一定的顺序和规则执行。

定义完成的转换和作业可以使用程序或者脚本进行调用,首先将定义的转换或者作业存储在Kettle的资源库(Repository)中,然后通过Kettle提供的Pan和Kitchen组件分别进行调用(Pan用来调用transformation,Kitchen用来调用job),我们将在随后的内容介绍调用方法。

通常,首次接触“资源库”这个词汇会让人感觉难以理解,但撇开这个名词本身,它本质上就是创建关系数据库中的一些配置表,这些配置表用来存储转换或者作业的相关信息(如转换的名称、数据库连接的字符串等),Pan和Kitchen组件可以根据资源库里的这些信息来调用对应的转换或者作业。

在使用资源库之前,需要先创建一个资源库,在图形界面中进入工具→资源库→连接资源库,即可以出现相应的创建向导,通过向导可以轻松完成资源库的创建。

一旦成功创建并连接了资源库,随后进行的文件读取和保存操作就可以对应到该资源库。例如,作者在自己的测试环境中连接资源库后,单击菜单文件→打开,Kettle会自动读取资源库中保存的转换和作业信息,并将所有的转换和作业展示出来以供选择,如图2-9所示。

 

图2-9 Kettle资源库中的转换和作业

这些存放在资源库中的转换和作业,可以通过Pan和Kitchen组件进行调用,Pan是Kettle提供的用于批量调用转换的工具,Kitchen是用于批量调用作业的工具。在data-integration目录中可以找到Pan.bat和Kitchen.bat(Windows环境对应Pan.sh,Linux环境对应Kitchen.sh)。

在Linux环境中可以使用如代码清单2-37所示的脚本调用转换。

代码清单 2-37

pan.sh -rep=kettle_rep_test -trans="batch-into-table" -dir=/ -user=admin

-pass=admin

    -level=Basic

调用作业可以使用如代码清单2-38所示的命令。

代码清单 2-38

kitchen.sh -rep=kettle_rep_test -job="hive-oracle-test" -dir=/ -user=admin

-pass=admin

-level=Basic

如果有很多转换和作业需要运行,那么可以将这些命令写在一个shell脚本中,然后通过Linux系统自带的Crontab进行调度,或者通过专门的调度工具进行调度(请参阅2.4节)。

Kettle方面的推荐书籍:《Pentaho Kettle解决方案:使用PDI构建开源ETL解决方案》(作者:Matt Casters、Roland Bouman、Jos van Dongen著,初建军、曹雪梅译,电子工业出版社)。

2. 商用ETL工具:DataStage

DataStage是IBM InfoSphere开发的一款商用ETL工具,是IBM InfoSphere Information Server套件的简称。该套件包含三个组件:InfoSphere DataStage and QualityStage Designer、InfoSphere DataStage and QualityStage Director、InfoSphere DataStage and QualityStage Administrator。

InfoSphere DataStage and QualityStage Designer用于创建DataStage作业。

InfoSphere DataStage and QualityStage Director用于验证、调度、运行和监视DataStage作业。

InfoSphere DataStage and QualityStage Administrator用于系统管理(例如设置 IBM InfoSphere Information Server 用户,记录、创建和移动项目,设置清除记录的条件等)。

显然,相对于Kettle的轻量级部署,DataStage本身的架构已经非常复杂,相应的部署要求也比较高。DataStage作为IBM公司的一款产品,其目标客户群为大型企业,它甚至支持在大型机上运行ETL作业(能够生成可在大型机上运行的COBOL代码)。由于目前国内的银行仍然沿用IBM公司的大机系统,所以DataStage在国内的客户多存在于金融行业。

DataStage价格昂贵,一般需要支付年服务费、购买License等。同样,由于收取年服务费,所以能够提供很好的培训和技术支持。因此,需要根据企业自身特点选择商用ETL工具或者开源ETL工具,对于小型公司而言,开源工具仍是首选。

2.3.2 ETL作业

ETL作业是按照一定顺序组织的数据处理过程,它将数据处理的各个环节关联起来,并定义各个环节的触发规则,从而完成整个数据处理流程。

以Kettle为例,ETL作业由多个步骤(或称为作业项)组成,如图2-10所示。该作业除了开始的“START”与最后的“成功”步骤外,还包含以下三个实体作业项:

1)检测昨日交易明细文件是否存在。

2)SQL Server批量加载。

3)统计昨日交易。

作业项1)负责检测昨日的交易明细文件是否存在,如果该步骤返回“true”,则进行下一个作业项,否则退出作业。

作业项2)将昨日的交易明细文件批量加载至SQL Server数据库中,该作业项需要指定文件名称、格式文件等相关信息,使用的命令即是“SQL Server :bcp in”章节中讲述的方式。如果该作业项执行成功,那么昨日交易明细数据将增量更新至SQL Server的数据库表中;如果该作业项执行失败,则退出作业。

作业项3)对作业项2)中加载的交易数据进行统计,该作业项执行一段SQL脚本,并将计算结果存储在对应的结果表中。

 

图2-10 ETL作业示例

图2-10中的ETL作业按照预定的顺序将多个作业项串联起来,完成一个完整的数据加载和统计过程,该过程的每个步骤作为一个作业项独立存在,仅当上游的作业项执行成功后,才开始下一个作业项的执行。

需要注意的是,ETL工具仅用于作业的创建和简单调度,如果需要周期性地执行ETL作业,则需要使用专门的调度工具。

为了使ETL作业便于调度和监控,为ETL作业制定规范是一项非常重要的工作,良好的ETL作业命名规范和日志规范可以极大地方便作业监控和错误排查。接下来深入介绍这两个实用性的操作规范:ETL作业命名规范和ETL作业日志规范。

1. ETL作业命名规范

ETL作业命名规范主要是为了通过作业名称来标识作业的归属、重要程度、主要用途等,以便于作业的自动调度和监控,它不是ETL工具的强制要求。

通常需要根据企业具体的管理要求为ETL作业制定命名规范,该规范要尽可能地反应作业的归属用途等,并且长度不能太长,下面给出一个范例:

[员工编号].[作业类型].[作业描述]

该命名规范包含三个部分,用“.”分割:

1)员工编号,用于描述作业的归属,一般使用作业创建人或者负责人的员工编号。

2)作业类型,用于描述作业的重要程度,比如将作业类型定义为analysis、report、product等,分别对应分析、报表、生产。不同的作业类型的作业出现错误时,可以根据重要程度进行不同等级的报警通知。

3)作业描述,用于描述作业的主要功能,比如图2-10中的作业可以描述为trx_load_and_static,或者使用中文描述(如果ETL工具支持中文名称)。

命名规范同样可以规定ETL作业中出现的字母统一使用大写或者小写,本书采用小写的方式。按照这个规范,图2-10中的ETL作业将命名为:z06837. analysis.trx_load_and_static,其中z06837是员工编号,analysis说明该作业属于分析型的作业。

按照规范进行作业命名后,作业监控进程便可以自动发现运行失败的作业,并且根据作业名称中的员工编号找到该员工的邮箱地址和手机号码(需预先在数据库中保存员工编号与邮箱地址和手机号码的对应关系),并发送邮件通知和短信提醒,还可以根据作业类型在邮件中标记紧急程度,这部分内容将在2.5节进一步展开。

2. ETL作业日志规范

ETL作业一般包含多个步骤(作业项),作业运行中某些步骤可能运行失败,记录下失败原因对于错误排查非常重要。

虽然ETL工具都自带日志记录功能,但系统自动记录的日志信息一般可读性很差且缺乏灵活性。ETL作业日志规范就是要自定义一个统一且灵活的日志记录方式,以便于作业的监控和错误排查。下面给出一个ETL作业日志规范的范例:

1)ETL作业中需包含记录作业开始和作业完成的作业项。

2)每个作业项均需增加作业项运行失败分支,并发送邮件通知。

3)日志记录统一记录在数据库表etl_job_log中。

4)日志记录中的状态在作业状态表etl_job_status中统一定义。

5)使用统一的存储过程进行日志记录。

根据规范1、2的要求,图2-10中的ETL作业将修改为图2-11所示的样子。

 

图2-11 满足规范1和规范2的ETL作业

图2-11中,作业开始后增加了一个作业项“记录日志:作业开始”,这个作业项往etl_job_log表中插入一条新记录,记录今日该作业的开始时间等相关信息。另外,在作业的最后加入了作业项“记录日志:作业完成”,用于更新作业的最终状态,图2-12是表etl_job_log中记录的部分ETL作业日志。

 

图2-12 作业日志表中的部分记录

在其余的三个作业项上面,分别增加了运行错误分支。这些错误分支分别记录对应的作业项出错信息,同时记录下作业项出错时的系统时间,并在错误日志记录完成后,发送失败通知邮件。

修改后的ETL作业会在运行过程中将作业状态自动记录到数据库中,随后BI工具可以根据数据库中的日志记录展示监控报表或者进行错误报警。

日志记录表etl_job_log创建表脚本如代码清单2-39所示。

代码清单 2-39

create table etl_job_log

(

id   bigint not null auto_increment comment '自增长id',

job_name varchar(100) not null comment '作业名称',

run_date varchar(20) comment '运行日期',

start_time datetime comment '作业开始时间',

end_time datetime comment '作业结束时间',

upt_time datetime default current_timestamp comment '更新时间',

job_status int not null comment '作业状态id',

remark varchar(1000) comment '作业状态补充说明',

primary key (id)

);

其中,remark字段的记录原则为:作业项名称+错误说明,例如,“SQL Server批量加载:出错。”可以方便追踪到作业出错的作业项。

job_status字段是表etl_job_status的外键,记录的是状态id,其对应的状态描述可以通过关联表etl_job_status得到。

作业状态表etl_job_status创建表脚本如代码清单2-40所示。

代码清单 2-40

create table etl_job_status

(

id   bigint not null auto_increment comment '自增长id',

status_desc varchar(1000) not null comment '状态描述',

primary key (id)

);

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
3天前
|
机器学习/深度学习 存储 设计模式
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
本文探讨了数据基础设施设计中常见的一个问题:数据仓库或数据湖仓中的表格缺乏构建高性能机器学习模型所需的历史记录,导致模型性能受限。为解决这一问题,文章介绍了缓慢变化维度(SCD)技术,特别是Type II类型的应用。通过SCD,可以有效追踪维度表的历史变更,确保模型训练数据包含完整的时序信息,从而提升预测准确性。文章还从数据工程师、数据科学家和产品经理的不同视角提供了实施建议,强调历史数据追踪对提升模型性能和业务洞察的重要性,并建议采用渐进式策略逐步引入SCD设计模式。
16 8
特征时序化建模:基于特征缓慢变化维度历史追踪的机器学习模型性能优化方法
|
2月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
146 4
|
6天前
|
机器学习/深度学习 人工智能 算法
机器学习算法的优化与改进:提升模型性能的策略与方法
机器学习算法的优化与改进:提升模型性能的策略与方法
80 13
机器学习算法的优化与改进:提升模型性能的策略与方法
|
26天前
|
机器学习/深度学习 传感器 运维
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
本文探讨了时间序列分析中数据缺失的问题,并通过实际案例展示了如何利用机器学习技术进行缺失值补充。文章构建了一个模拟的能源生产数据集,采用线性回归和决策树回归两种方法进行缺失值补充,并从统计特征、自相关性、趋势和季节性等多个维度进行了详细评估。结果显示,决策树方法在处理复杂非线性模式和保持数据局部特征方面表现更佳,而线性回归方法则适用于简单的线性趋势数据。文章最后总结了两种方法的优劣,并给出了实际应用建议。
65 7
使用机器学习技术进行时间序列缺失数据填充:基础方法与入门案例
|
19天前
|
机器学习/深度学习 数据可视化 大数据
机器学习与大数据分析的结合:智能决策的新引擎
机器学习与大数据分析的结合:智能决策的新引擎
107 15
|
2月前
|
机器学习/深度学习 算法 UED
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法
在数据驱动时代,A/B 测试成为评估机器学习项目不同方案效果的重要方法。本文介绍 A/B 测试的基本概念、步骤及其在模型评估、算法改进、特征选择和用户体验优化中的应用,同时提供 Python 实现示例,强调其在确保项目性能和用户体验方面的关键作用。
42 6
|
2月前
|
机器学习/深度学习 分布式计算 算法
【大数据分析&机器学习】分布式机器学习
本文主要介绍分布式机器学习基础知识,并介绍主流的分布式机器学习框架,结合实例介绍一些机器学习算法。
269 5
|
2月前
|
机器学习/深度学习 数据采集 算法
机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用
医疗诊断是医学的核心,其准确性和效率至关重要。本文探讨了机器学习在医疗诊断中的前沿应用,包括神经网络、决策树和支持向量机等方法,及其在医学影像、疾病预测和基因数据分析中的具体应用。文章还讨论了Python在构建机器学习模型中的作用,面临的挑战及应对策略,并展望了未来的发展趋势。
165 1
|
2月前
|
存储 机器学习/深度学习 大数据
量子计算与大数据:处理海量信息的新方法
量子计算作为革命性的计算范式,凭借量子比特和量子门的独特优势,展现出在大数据处理中的巨大潜力。本文探讨了量子计算的基本原理、在大数据处理中的应用及面临的挑战与前景,展望了其在金融、医疗和物流等领域的广泛应用。
|
2月前
|
机器学习/深度学习 数据采集 数据处理
谷歌提出视觉记忆方法,让大模型训练数据更灵活
谷歌研究人员提出了一种名为“视觉记忆”的方法,结合了深度神经网络的表示能力和数据库的灵活性。该方法将图像分类任务分为图像相似性和搜索两部分,支持灵活添加和删除数据、可解释的决策机制以及大规模数据处理能力。实验结果显示,该方法在多个数据集上取得了优异的性能,如在ImageNet上实现88.5%的top-1准确率。尽管有依赖预训练模型等限制,但视觉记忆为深度学习提供了新的思路。
41 2