kettle工具使用及集成[通俗易懂]

kettle工具使用及集成[通俗易懂]kettle简介Kettle是一款免费开源的基于Java的企业级ETL工具,功能强大简单易用,无可抗拒。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

kettle简介

Kettle是一款免费开源的基于Java的企业级ETL工具,功能强大简单易用,无可抗拒。

kettle工具使用及集成[通俗易懂]

kettle有两个比较重要且常用的脚本文件:1)转换(Transformation)和作业(Job),其中转换是对数据处理的容器,包含对数据的各种处理,有多个步骤(Step)组成;作业相对于转换可以配置出更多高级的操作,可以将多个转换组合成一块进行数据处理

kettle的使用方式

1.图形化界面工具(spoon)

kettle工具使用及集成[通俗易懂]

上图截取了数据处理的转换脚本,可以看出基于图形化界面操作kettle进行数据处理,只需按照数据处理的流程配置相应的步骤即可,简单易用,但不适合在程序中集成

2.依赖jar包的方式

应用程序集成kettle更多采用的是maven依赖jar包的方式,在jar包依赖之后可以通过两种方式对数据进行处理:

1)通过调用kettle脚本的方式

在kettle图像化界面配置好脚本(工作或转换),然后通过应用程序加载执行脚本即可完成对数据的处理操作,程序实例如下:

// 转换脚本路径
 String filename = "C:/Desktop/person_import_data.ktr";
 // 初始化kettle环境
 KettleEnvironment.init();
 // new tran的源数据对象
 TransMeta transMeta = new TransMeta(filename);
 // 创建tran对象
 Trans trans = new Trans(transMeta);
 // 异常处理
 trans.prepareExecution(null);
 // 开始执行
 trans.startThreads();
 // 记录最后一个步骤的数据
 final List<RowMetaAndData> rows = new ArrayList<RowMetaAndData>();
 RowListener rowListner = new RowListener() {
     public void rowWrittenEvent(RowMetaInterface rowMeta, Object[] row)
             throws KettleStepException {
         rows.add(new RowMetaAndData(rowMeta, row));
     }
     public void rowReadEvent(RowMetaInterface arg0, Object[] arg1)
             throws KettleStepException {
     }
     public void errorRowWrittenEvent(RowMetaInterface arg0,Object[] arg1)         throws KettleStepException {
     }
 };
 List<StepMetaDataCombi> steps = trans.getSteps();
 String stepname = steps.get(steps.size() - 1).stepname;
 StepInterface stepInterface = trans.findRunThread(stepname);
 stepInterface.addRowListener(rowListner);
 // 等待执行完毕
 trans.waitUntilFinished();
 if (trans.getErrors() > 0) {
     log.error(LogFormatter.toLog(CommonErrorCode.ERR_ERROR, "message"), "transformation of kettle occurred error while extracting data");
    throw new BaseRuntimeException(CommonErrorCode.ERR_ERROR);
 }
 for (int i = 0; i < rows.size(); i++) {
     RowMetaAndData rmad = rows.get(i);
  String[] fields = rmad.getRowMeta().getFieldNames();
  Map<String, Object> map = new HashMap<>();
  for (String field : fields) {
         map.put(field, rmad.getString(field, null));
  }
     list.add(map);
 }

2)调用kettle的api:通过kettle的api可以模拟步骤(step),脱离图形化界面,下面通过kettle的api模拟了一个表输入步骤,但是通过kettle的api模型步骤,适用常用的步骤,很多步骤在api中是没有的

//添加数据连接
 DatabaseMeta dataBaseInput = new DatabaseMeta("DbInput", dbInfo.getDbType(), "Native", dbInfo.getIp(), dbInfo.getDbName(),dbInfo.getPort(), dbInfo.getUser(), dbInfo.getPassWord());
 transMeta.addDatabase(dataBaseInput);
 //表输入
 TableInputMeta tableInputMeta = new TableInputMeta();
 tableInputMeta.setDatabaseMeta(transMeta.findDatabase("DbInput"));
 tableInputMeta.setSQL(dbInfo.getSql());
 StepMeta inputStep = new StepMeta("table",tableInputMeta);
 //inputStep.setLocation(50,50);
 inputStep.setDraw(true);
 transMeta.addStep(inputStep);

kettle性能分析

在对数据进行同步时,测试了分别在数据库中生成10万、100万、1000万和1亿数据,通过kettle处理入库,观察其性能。性能如下表所示:

数据量(万条) 同步时间(s)
10 3.8
100 37.5
1000 620
10000 5987

常见问题

  • Kettle连接mysql并不支持目前springboot规定的mysql-connector-java版本(8.0.19),可以用5.1.47版本的驱动解决这个问题
  • Oracle可以根据数据库服务名(service_name)和数据库实例名(instance_name,SID)连接数据库,jdbc连接oracle时,可以根据不同的url形式,决定采用service_name还是instance_name进行连接;kettle默认是采用instance_name连接oracle数据库的,如果想要采用service_name连接oracle,则需要在service_name前加上“/”。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184288.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 使用Iocomp工控图表工具绘制实时曲线

    使用Iocomp工控图表工具绘制实时曲线概述:本文为使用Iocomp工控图表工具绘制实时曲线探索及研究教程,为大家介绍了Iocomp控件、实时曲线绘制方法、Iocomp界面操作,属性分类等。帮助学习者更好的运用Iocomp。

    2022年7月17日
    19
  • MFC中的SetCapture、ReleaseCapture、GetCapture函数「建议收藏」

    MFC中的SetCapture、ReleaseCapture、GetCapture函数「建议收藏」转载地址:http://blog.csdn.net/laowu_/article/details/6839345  正常情况下,鼠标指针位于哪个窗口区域内,鼠标消息就自动发给哪个窗口。如果调用了SetCapture,之后无论鼠标的位置在哪,鼠标消息都发给指定的这个窗口,直到调用ReleaseCapture或者调用SetCapture设置另一个窗口为止。很多时候,窗口或控件在鼠标按下后,需…

    2022年5月29日
    82
  • BootStrap初始

    序言什么是BootstrapBootstrap是Twitter开源的基于HTML、CSS、JavaScript的前端框架。它是为实现快速开发Web应用程序而设计的一套前端工具包。它支持响应式布

    2022年3月29日
    58
  • php面试题目2020_php算法面试题及答案

    php面试题目2020_php算法面试题及答案2019最新整理PHP面试题附答案1、什么事面向对象?主要特征是什么?面向对象是程序的一种设计方式,它利于提高程序的重用性,使程序结构更加清晰。主要特征:封装、继承、多态。2、SESSION与COOKIE的区别是什么,请从协议,产生的原因与作用说明?A、http无状态协议,不能区分用户是否是从同一个网站上来的,同一个用户请求不同的页面不能看做是同一个用户。B、SESSION存储在服…

    2022年8月26日
    7
  • 大一c语言图书管理系统_基于java的图书管理系统

    大一c语言图书管理系统_基于java的图书管理系统C课程设计——图书管理系统1、题目意义图书馆,作为文献的聚集地和展示平台,常常扮演着引领文化前进的角色,是每个大学不可或缺的基础设施,而图书管理系统则是一个图书馆能够正常运转的关键。本次课程设计使用C语言制作程序来实现图书的登记,删除,查询,浏览以及读者的借阅,还书,会员登录,修改密码等功能。程序中涉及到数据链表和文件指针的操作,包括结构体数据定义,使用及文件的读写,定位,修改等。2、设计思…

    2022年10月11日
    1
  • java内存模型_简述java内存模型

    java内存模型_简述java内存模型  什么是JMM  JMM即为JAVA内存模型(javamemorymodel)。因为在不同的硬件生产商和不同的操作系统下,内存的访问逻辑有一定的差异,结果就是当你的代码在某个系统环境下运行良好,并且线程安全,但是换了个系统就出现各种问题。Java内存模型,就是为了屏蔽系统和硬件的差异,让一套代码在不同平台下能到达相同的访问结果。JMM从java5开始的JSR-133发布后,已经…

    2025年9月12日
    5

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号