首页 > 其他分享 >Pentaho Data Integration 数据集成kettle

Pentaho Data Integration 数据集成kettle

时间:2022-11-02 15:11:29浏览次数:81  
标签:PDI kettle Integration 双击 Pentaho student pentaho id

什么是 Pentaho

Pentaho Data Integration (PDI) 提供抽取、转换和加载 (ETL) 功能,使用统一的方式实现了一系列复杂的ETL过程。

如果你第一次接触 Pentaho,你可能会看到或听到 Pentaho 数据集成称为“Kettle”。Pentaho Data Integration 最初是一个名为“Kettle”的开源项目。术语 KETTLE 是一个递归术语,代表 Kettle Extraction Transformation Transport Load Environment。Pentaho 收购 Kettle 后,更名为 Pentaho Data Integration。其他 PDI 组件(例如SpoonPanKitchen)的名称最初是为了支持 ETL 产品的“烹饪”隐喻。

PDI 常见用途

PDI 客户端(也称为 Spoon)是一个桌面应用程序,使你能够构建转换以及安排和运行作业。

PDI 客户端的常见用途包括:

  • 不同数据库和应用之间的数据迁移。
  • 充分利用云、集群和大规模并行处理环境将大量数据集加载到数据库中。
  • 数据清洗,步骤从非常简单到非常复杂的转换。
  • 数据集成,包括利用实时 ETL 作为 Pentaho Reporting 数据源的能力。
  • 内置支持缓慢变化的维度和代理键创建的数据仓库填充(如上所述)。
  • 转换步骤:执行 ETL 任务。
  • 作业条目:编排 ETL 活动,例如定义流程、依赖项和执行准备。
  • 定时作业调度:您可以在特定时间运行作业。
  • 数据流分析:您可以从消息流中检索数据,然后在近乎实时的处理后获取它。

更多特性请参考官方产品文档:

https://help.pentaho.com/Documentation/9.1/Products/Pentaho_Data_Integration

下载安装 PDI 客户端

访问Hitachi Vantara官网下载社区版。

https://www.hitachivantara.com/en-us/products/data-management-analytics/pentaho/download-pentaho.html

也可以访问GitHub拉取源码手动编译安装,网上教程很多。

https://github.com/pentaho/pentaho-kettle

下载完成后解压即可,这里下载的版本是9.1.0.0-324

启动 PDI 客户端

  1. 将jdk拷贝到PDI根目录,为PDI配置单独的jdk。

    # 用编辑器打开Kettle 根目录下的 Spoon.bat文件(linux下是spoon.sh)
    set JAVA_HOME=%cd%/jdk1.8_144
    set PENTAHO_JAVA_HOME=%JAVA_HOME%
    
  2. 转到 PDI 解压目录。例如 ...\pentaho\design-tools\data-integration-9.1.0.0-324

  3. 以最适合您的操作系统的方式启动 PDI 客户端。

    • Windows:双击Spoon.bat
    • Linux:双击spoon.sh
    • Macintosh:转至.../pdi-ee/data-integration并双击Data Integration图标。

案例1)级联数据清洗

数据表结构如下图所示,我们发现学校、班级、学生id字段的编码是有一定规则的。如果数据表没有设置外键约束,随着系统上线时间跨度的增加,出现的需求变更、开发和运维人员的更替,可能会出现数据约束和描述不符,出现脏数据造成报表和统计不正确,无法反映真实情况。

为了简化问题,我们限定了脏数据的影响范围,手动模拟了这种情况作为案例演示PDI的使用,问题数据集中在学校班级学生学生课程中间表中并且上下级关系正确。并用以下SQL语句检查。

SELECT *,IF(SUBSTR(id,1,6) = sys_area_id,'相等','不相等') FROM school;
SELECT *,IF(SUBSTR(id,1,8) = school_id,'相等','不相等') FROM class;
SELECT *,IF(SUBSTR(id,1,10) = class_id,'相等','不相等') FROM student;
SELECT * FROM student INNER JOIN student_course ON student.id = student_course.student_id;

我们的目标是将问题数据转存到其他同结构的表中,具体步骤如下。

连接数据库

右键转换选择新建转换 -> 右键DB连接选择新建

输入JDBC连接参数,点击测试出现找不到数据库驱动错误。

下载对应的mysql驱动放到PDI主目录的lib下,重启PDI客户端,再次点击测试按钮,提示我们测试成功。

设置数据库编码

切换至选项菜单,在命令参数列新增characterEncoding参数值为utf8点击确定。

用到的组件说明

表输入

https://help.pentaho.com/Documentation/9.1/Products/Table_Input

表示出

https://help.pentaho.com/Documentation/9.1/Products/Table_Output

字段选择

https://help.pentaho.com/Documentation/9.1/Products/Select_Values

编写转换步骤

核心对象列表选择表输入拖放到右侧,双击打开表输入,查询所有学校信息,同时准备出正确的学校id(new_id)。

核心对象列表选择表输入拖放到右侧,按住shift键从学校拖到表输出,双击打开表输出,将正确的学校id映射到id字段,参照下图进行配置。

 

同结构的表需要事先手动建好,也可以使用PDI创建,这里采用手动创建的方式为大家演示表名为school_01。

核心对象列表选择字段选择拖放到右侧,按住shift键从学校拖到字段选择,双击打开字段选择,参照下图进行配置,为下一步转换做准备。

核心对象列表选择表输入拖放到右侧,按住shift键从学校id拖到表输入,双击打开表输入,参照下图进行配置。

核心对象列表选择表输出拖放到右侧,按住shift键从班级拖到表输出,双击打开表输出,分别将正确的班级和学校id映射到目标表的班级和学校id字段,参照下图进行配置。

重复以上步骤完成其他数据表的数据转换,保存转换点击运行。

至此完成了此次转换,接下来我们来验证一下转换后的数据

数据清洗验证

SELECT *,IF(SUBSTR(id,1,6) = sys_area_id,'相等','不相等') FROM school_01;
SELECT *,IF(SUBSTR(id,1,8) = school_id,'相等','不相等') FROM class_01;
SELECT *,IF(SUBSTR(id,1,10) = class_id,'相等','不相等') FROM student_01;
SELECT * FROM student_01 INNER JOIN student_course_01 ON student_01.id = student_course_01.student_id;

思考

思考一下这个案例如果不用PDI转换而使用SQL语句可不可以完成呢?如果不是要求转存转换结果而是要求更新原有数据表呢?

数据库脚本我会附到GitHub上,有兴趣的小伙伴可以尝试一下。

https://github.com/Walk-forward/blog-garden/blob/master/PentahoDataIntegration/student_database.sql

标签:PDI,kettle,Integration,双击,Pentaho,student,pentaho,id
From: https://www.cnblogs.com/cinemaparadiso/p/16851065.html

相关文章

  • Kettle入门
    Kettle:Kettle是什么?Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。中文名称叫水壶,该项目的主程序员MATT希望把......
  • FR调用kettle
    packagecom.fr.data;importcom.fr.script.Calculator;importcom.fr.data.DefinedSubmitJob;importcom.fr.log.FineLoggerFactory;importcn.hutool.core.codec.Base64......
  • 【论文阅读】VDBFusion: Flexible and Efficient TSDF Integration of Range Sensor D
    Type:SensorsYear:2022tag:Mapping组织:Bonn参考与前言论文链接:https://www.ncbi.nlm.nih.gov/pmc/articles/PMC8838740/其他参考建议看一下本篇论文的对应refer......
  • Entity Framework教程-测试(Unit Testing, Integration Testing, and Mocking)
    更新记录转载请注明出处:2022年10月25日发布。2022年10月22日从笔记迁移到博客。生成测试数据(seeddata)说明有几种方法可以创建模拟数据:使用FluentAPIOnModelC......
  • 这是一篇有深度的文章,没研究过kettle源码是看不懂的
    直接上干货引入依赖<properties><pdi.version>8.2.0.0-342</pdi.version></properties><!--kettledependencystart--><dependency><groupId>pent......
  • 数据库 使用Kettle同步数据时报错Caused by: java.sql.SQLException: Incorrect stri
    使用kettle向mysql8.0数据库同步数据时遇到的报错,这是数据库表的编码问题。可以通过修改Mysql数据库默认字符集及相关库表、字段字符字符集解决。检查数据库表相关编码设......
  • Kettle需求场景复现
    kettle真实需求开发,可实现kettle入门,包含细节亿点点。前置说明遍历文件夹下的文件,读取所有的sheet页(指定的sheet)落库读取execl文件和csv文件,获得文件中shee......
  • Java调用Kettle
    Java调用kettle,难的不是怎么调用,而是解决maven依赖冲突问题,直接将kettle依赖,添加到我们的maven工程,可能会导致代码大范围报错;解决方案也很简单,就是直接从spoon的......
  • kettle用时间变量做表名查询
    需求:表名为*****_yearmonth类型整体结构  第一步,获取系统信息  选择一下就可以第二步,获取想要的日期字符串格式  第三步,将其设置成变量   ......
  • Visual Tracking Using Attention-Modulated Disintegration and Integration
    题目:VisualTrackingUsingAttention-ModulatedDisintegrationandIntegrationAbstract本文使用注意力调制的解体和整合进行跟踪,把一个目标分解成多个认知单元,并且训练多......