PDI(Kettle)介绍
Kettle最早是一个开源的ETL工具,全称为KDE Extraction, Transportation, Transformation and Loading Environment。后来,Pentaho公司收购了Kettle项目,从此,Kettle成为企业级数据集成及商业智能套件Pentaho的主要组成部分,Kettle亦重命名为Pentaho Data Integration(简称PDI)。Pentaho公司后来又被日本的日立收购,成为Hitachi Vantara的一部分。

PDI以Java开发,支持跨平台运行,其特性包括:支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。KDI分为商业版与开源版,一般人仍习惯把Pentaho Data Integration的开源版称为Kettle。

主要功能
PDI作为一个端对端的数据集成平台,可以对多种数据源进行抽取(Extraction)、加载(Loading)、数据落湖(Data Lake Injection)、对数据进行各种清洗(Cleaning)、转换(Transformation)、混合(Blending),并支持多维联机分析处理(OLAP)和数据挖掘(Data mining)。部分特色功能包括:
1.无代码拖拽式构建数据管道
2.多种数据源支持
3.数据管道可视化
4.模板化开发数据管道
5.可视化计划任务
6.大数据处理

01 | 无代码拖拽式构建数据管道

Pentaho采用拖拽组件、连线、配置的方式来构建数据管道,透过几百个不同的组件,用户可以在不编写一句代码就能轻松完成对数据源读取,对数据进行关联、过滤、格式转换、计算、统计、建模、挖掘、输出到不同的数据目标,极大程度地降低开发技术门槛和有效减低开发和维护成本。
02 | 多种数据源支持

关系型数据库支持类型包括:DB2,Greenplum, Hive, MS SQL Server, MySQL, Oracle, PostgreSQL等。大数据源支持包括:Avro, Cassanddra, HBase, HDFS, MongoDB等。文件格式支持包括:CSV, TXT, JSON, Excel, XML等。流数据支持包括:AMQP, Kafka, MQTT, 其他数据源对接包括:S3, SAS, Salesforce, REST等。
03 | 数据管道可视化

支持用户在数据管道任何一个步骤对当前数据进行查看(Examine),并可以在线以表格和图表(例如:柱状图、饼图等)输出步骤的数据,甚至可以支持不落地直接把任何一个步骤的数据以JDBC的方式提供给第三方应用访问。
04 | 模板化开发数据管道

PDI提供了一个叫MDI的功能,MDI全称是Metadata Injection元数据注入,用户可以透过MDI把数据转换模板化,然后把像数据表名、文件路径、分隔符、字符集等等这些变量放在一个表或者文件里,然后利用MDI把这些变量注入数据转换模板,PDI即可自动生成所需要的数据转换。
05 | 可视化计划任务

PDI提供可视化方式配置任务计划(Schedule),用户可透过Spoon或网页端的Pentaho User Console(商业版)来配置和维护任务具体的执行时间、间隔、所使用的参数值、以及具体运行的服务器节点。用户亦可以透过Spoon或Pentaho User Console(商业版)查看任务计划列表。当然,用户也可以透过Spoon或Pentaho User Console(商业版)对任务执行情况进行实时监控。
06 | 大数据处理

使用转换步骤连接到各种大数据数据源,包括 Hadoop、NoSQL 和分析数据库(如 MongoDB)。
项目结构
1.assemblies:项目分发存档在此模块下生成
2.core:核心实现
3.dbdialog:数据库对话框
4.ui:用户界面
5.engine:PDI引擎
6.engine-ext: PDI引擎扩展插件
7.plugins:PDI core插件
8.integration:集成测试

PDI客户端
PDI 客户端(也称为 Spoon)是一个桌面应用程序,可让您构建转换以及安排和运行作业。
PDI 客户端的常见用途包括:
1.不同数据库和应用程序之间的数据迁移
2.充分利用云、集群和大规模并行处理环境将庞大的数据集加载到数据库中
3.使用从非常简单到非常复杂的转换的步骤进行数据清理
数据集成,包括利用实时 ETL 作为 Pentaho Reporting 数据源的能力
4.内置支持缓慢变化维度和代理键创建的数据仓库填充

相关链接

PDI相关地址

01
源码地址:
https://github.com/pentaho/pentaho-kettle/
02
官方社区版下载地址: https://www.hitachivantara.com/en-us/products/dataops-software/data-integration-analytics/pentaho-community-edition.html
03
sourceforge下载地址:
https://sourceforge.net/projects/pentaho/files/
如果需要最新的PDI,可使用Maven(3+)构建。注意:最新的PDI已使用Java JDK 11。

安装PDI
01 | 前提

a.安装JDK 11
b.对于Linux/Uubuntu安装,还需要安装libwebkitgtk-1.0-0才能使PDI正常工作
02 | 下载Zip

从Hitachi Vantara Pentaho社区页面下载适用于您的操作系统的压缩包,版本和构建名为:pdi ce-<version>-<build>.zip。
03 | 解压Zip

将文件解压到指定目录
04 | 添加JDBC

在PDI安装目录的data-integration\lib下添加相应数据库的JDBC驱动
04 | 启动PDI

对于Windows,找到spoon.bat。双击此文件以启动PDI。对于Linux/Ubuntu,输入./spoon.sh命令启动PDI
spoon迁移表结构

新建一个作业或者转换


DB连接-新建数据库连接向导


选择数据库名称和类型


输入数据库地址、端口以及数据库名


数据库空间和索引表空间可不设置


设置数据库用户名和密码并测试连接


复制多表向导


选择源和目的数据库


选择要迁移的表

注意1:这里的表是按表创建时间排序的,无法按其他方式进行排序。特别是对于需要迁移的表以及表数据众多的时候,如果表转换出现问题,很难排查,建议批量转换。
注意2: Kettle最主要的作用在于数据的抽取和转换,函数、存储过程、视图以及索引、约束等无法通过Kettle进行迁移。

配置Job名以及Job存放目录


生成了一个作业

注意:如果需要迁移的数据很少,直接点击RUN箭头迁移即可。

Generate the SQL needed to run this job-生成SQL


查看并执行SQL


查看表结构迁移情况
MariaDB [test]> show tables;Empty set (0.000 sec)MariaDB [test]> show tables;+----------------+| Tables_in_test |+----------------+| test1 || test2 || test_table1 || test_table2 |+----------------+4 rows in set (0.000 sec)
定时同步单表数据

新建转换


新建作业


表输入组件


排序合并组件


数据同步组件


表输出组件


指定作业中转换文件的路径


配置每30秒同步一次


点击RUN执行作业


查看执行结果


源库insert
INSERT INTO "TEST_TABLE1" ("id", "age") VALUES ('5', '21');INSERT INTO "TEST_TABLE1" ("id", "age") VALUES ('6', '21');INSERT INTO "TEST_TABLE1" ("id", "age") VALUES ('7', '22');INSERT INTO "TEST_TABLE1" ("id", "age") VALUES ('8', '22');

目标库查看同步情况


源库update
UPDATE "TEST_TABLE1" SET "age" = '24' WHERE "id" = '1';UPDATE "TEST_TABLE1" SET "age" = '26' WHERE "id" = '2';

目标库查看同步情况


源库delete
DELETE "TEST_TABLE1" WHERE "id" = '7';DELETE "TEST_TABLE1" WHERE "id" = '8';

目标库查看同步情况

定时多表数据同步

多表同步任务-主作业


获取变量-数据迁移-作业


获取全量表名-转换任务


设置变量-转换任务


数据迁移同步-转换任务


获取表名组件


字段选择组件


复制记录到结果组件


从结果获取记录组件


设置环境变量


表输入组件


表输出组件


获取变量-数据迁移作业-start


指定转换任务-获取变量-文件路径


指定转换任务-数据迁移-文件路径


数据迁移作业-主任务-配置定时任务


主任务-配置获取全量表名任务路径


主任务-配置获取变量与数据迁移作业并勾选执行每一个输入行


点击主任务-RUN-执行作业


查看执行结果








