轻松一刻,图形化ETL

原创
2022/08/11 10:48
阅读数 1K

什么是ETL

ETL是将数据从一些数据源,经过抽取(extract)、转换(transform)、加载(load)到其它数据仓库的过程。

抽取 是从不同数据源,不同类型的数据库读取数据的过程。
转换 是将抽取的数据,通过一系列转换到目标数据源的过程。它里面通常会发生:数据库查询、合并数据源、过滤数据等。
加载 是将处理后的数据,写入到目标数据仓库中。

 

 

为什么有ETL

  1. ETL处理的数据:数据源多、数据量大、数据经常变化;
  1. 自主开发:各种语言混杂开发,无架构可言,后期维护难度大。

 

现在ETL工具市场

费用贵,或者不好用


商业ETL: Datastage、Powercenter
开源ETL: KettleTalend

 

开源类似ETL的工具:

petl 

Python开发的ETL工具;

优点:容易上手、转换过程可以灵活处理、转换过程的工具非富、可使用Python生态的所有工具
缺点:处理特定行的转换很复杂、不是图形化界面、新人不容易接入,后期不容易维护

 

DataX 数据同步工具

DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、DRDS 等各种异构数据源之间高效的数据同步功能。

优点:性能有保障;抽取(extract)、加载(load)过程的工具丰富;可扩展抽取与加载过程
缺点:转换(transform)需要全部自行开发、新人不容易接入,后期不容易维护

 

Spring Cloud Data Flow

Spring家庭出口的数据集成和实时处理数据管道,基于Spring Cloud基础上,提供web界面管理。可方便的与Spring家族产品整合;
其中两个要的组件:

 

Apache Airflow

Python语言开发,Apache孵化中的产品。用于管理作业流和数据处理流水线。提供Web界面管理和监控任务的执行情况。

非官方5分钟入门教程:
https://baijiahao.baidu.com/s?id=1570444043156451&wfr=spider&for=pc

 

Apache NiFi

在Apache NiFi官网上,是这么介绍NiFi的:“一个易用、强大、可靠的数据处理与分发系统”。 简单来说,NiFi用于自动化管理系统之间的数据流。

Apache NiFi介绍: https://www.cnblogs.com/zskblog/p/7284198.html
Apache NiFi性能测试: http://blog.csdn.net/qq_28326077/article/details/62232130

 

我们的需求

  1. 免费;
  1. 学习成本低,学习曲线平缓;
  1. 性能:满足需求的情况,尽量高;
  1. 已有功能基本能满足需求;

 

对比 KettleTalend

 

Pentaho Data Integration (Kettle)是Pentaho生态系统中默认的ETL工具。通过非常直观的图形化编辑器(Spoon),您可以定义以XML格式储存的流程。在Kettle运行过程中,这些流程会以不同的方法编译。用到的工具包括命令行工具(Pan),小型服务器(Carte),数据库存储库(repository)(Kitchen)或者直接使用IDE(Spoon)。

Talend Open Studio 是 Talend 开发的ETL工具——Talend 是一家主营数据集成和数据管理解决方案的企业。Talend 采用用户友好型,综合性很强的IDE(类似于Pentaho Kettle 的 Spoon)来设计不同的流程。这些流程可以在IDE内部测试并编译成Java 代码。您可以随时查看并编辑生成的Java代码,同时实现强大的控制力和灵活性。

 

Talend

Kettle

技术支持

主要在美国

在美国,欧洲(比利时,德国,法国,英国),亚洲(中国,日本,韩国)都可以找到相关技术支持人员。

部署

输出 java 或perl 文件,

通过操作系统调度工具来运行

输出XML,

可以使用 job 作业方式或操作系统调度,来执行一个转换文件或作业文件,也可以通过集群的方式在多台机器上部署。

速度

需要手工调整,对特定数据源有优化知识。

比 Talend 快,不过也需要手工调整,对 Oracle 和 PostGre 等数据源做了优化,同时也取决于转换任务的设计。

数据质量

在 GUI 里有数据质量特性,可以手工写 SQL 语句。

在 GUI 里有数据质量特性,可以手工写 SQL 语句、java脚本、正则表达式来完成数据清洗。

监控

有监控和日志工具

有监控和日志工具

连接性

各种常用数据库,文件,web service。

非常广泛的数据库,文件,另外可以通过插件扩展。

 

我们的最终选择:Kettle

 

下载

https://sourceforge.net/projects/pentaho/files/Data%20Integration/

 

任务(.kjb)与转换(.ktr)

Kettle中有两种任务分类:

  • 任务(JOB): 可计划执行转换或任务的job。
  • 转换(Transformation):执行抽取(extract)、转换(transform)、加载(load)的任务。

 

kettle 转换主要组件介绍

 

简单讲述一下这几大常用控件的分类:

 

  • 输入控件:顾名思义就是将数据从其它载体中输入到kettle中,即抽取数据过程,我们可以从数据库表中获取,从文本文件,EXCEL,XML等文件获取,还可以只在kettle中模拟数据,或者获取系统中的参数,往往使kettle的开始部分。
  • 输出控件:即相对上边输入,是对经过kettle处理的数据进行向数据库,各种文件的输出。往往是kettle转换的结束部分,也就是加载部分。
  • 转换:这个是转换过程中,我们可以通过这些控件,添加新的字段,例如:主键,删除标识等。还有对字符串字段的各种处理,对字段的各种处理。即我们转换中对数据的加工过程。
  • Utility(工具控件):即我们转换中的一些辅助控件,例如发送邮件,写日志等。
  • 流控件:是控制整个转换流程,数据流向的一些控件,例如Swich/Case就像Java的 if else等,过滤记录来过滤一些我们不想操作的记录等。
  • 脚本:主要是针对JS,SQL,Java三种语言的支持
  • 查询控件:主要是针对数据库表的查询操作,还有就是HTTP,webservice的获取工作等。

 

Kettle之Hello World

转换之Hello World:

  1. 双击Spoon.bat,打开kettle

  1. 新建转换:  点击 "文件->新建转换" 。

 

  1. 如下,搜索table。并将"Table Input"和"Table Output"拖动到右边"Transformation 1"中。

  1. 左击"Table Input",并按住Shift键,将线条与"Table ouptput"组件连接起来。

 

  1. 双击"Table Input",点击“New” Connection。配置数据库连接信息

  1. 输入SQL:

​​​​​​​

  1. 进入“Table Output”,选择刚刚创建的连接,并输入需要输出到的tableName。

  1. 点击执行就可以看到结果。

 

  1. 右击可修改并发线程数

 

JOB之HelloWorld

  1. 同上面的步骤,新建job。并创建如下视图。

  1. 在Transformation步骤中,输入你的上面创建的转换路径。

  1. START中可以创建计划调用

项目中如何实践

  1. Kettle开发:
    1. 统一通过参数传递:路径(输入、输出、日志),任务中使用的参数。因为Kettle支持非常的变量传递,以及在任务的任务地方基本都可以
    2. 规范统一的目录和命名规范:方便统一流程
    3. Kettle文件管理:都在git中管理
  1. 部署:
    1. 自动更新kettle任务到服务器:Jenkins通过webhook接口自动触发更新任务;
    2. 创建计划任务:在统一的调度系统创建触发任务(需要指定执行哪个Kettle任务,以及传递的参数)
  1. Kettle计划执行与监控:
    1. 使用xxl-job开发调试系统;
    2. 开发完的kettle文件,自动部署到任务服务器,并在后台创建计划任务调度相应的kettle任务;

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部