ETL工具kettle与java结合使用程序生成一个简单的转化文件

Kettle: 合并记录 haha 阅读详情

最近项目中使用ETL工具kettle(4.+)对数据库的数据进行清洗,使用工具spoon来使用一些图形化的操作比较简单,抽空研究了下用使用kettle的一些jar包,把kettle结合到java(web项目一样)程序中。留作一个记录,以后备用查看。

    先看看网站上下了很多资料看 http://infocenter.pentaho.com/help/index.jsp?topic=%2Fcat_dev_guides%2Ftop_dev_guides.html(主要看Developer Guides/Embedding and Extending Pentaho Data Integration/...)
    下载kettle的api和源码看看,也可以帮你解决不少问题的。
    下面是我自己写(加参考)的一个生成.ktr文件的代码。
    (添加的jar包,我也没有太多的注意,看例子加入(有些可能没有必要,可以尝试的去掉一些测试下)的:
avalon-framework-4.1.3.jar
commons-collections-3.2.jar
commons-io-1.4.jar
commons-lang-2.4.jar
commons-logging-1.1.jar
commons-vfs-20091118-pentaho.jar
kettle-core-4.4.0-GA.jar
kettle-db-4.4.0-GA.jar
kettle-engine-4.4.0-GA.jar
log4j-1.2.12.jar
logkit-1.0.1.jar
servlet-api-2.3.jar

package com.yoodo.trans;

import java.io.File;

import org.apache.commons.io.FileUtils;
import org.pentaho.di.core.KettleEnvironment;
import org.pentaho.di.core.database.DatabaseMeta;
import org.pentaho.di.core.exception.KettleXMLException;
import org.pentaho.di.core.plugins.PluginRegistry;
import org.pentaho.di.core.plugins.StepPluginType;
import org.pentaho.di.trans.TransHopMeta;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.trans.steps.insertupdate.InsertUpdateMeta;
import org.pentaho.di.trans.steps.tableinput.TableInputMeta;

public class TransDemo {
	 public static TransDemo transDemo;
	
	 /**
	  * 两个库中的表名
	  */
	 public static String bjdt_tablename = "T_USER";
	 public static String kettle_tablename = "T_USER";
	 
	/**
	 * 数据库连接信息,适用于DatabaseMeta其中 一个构造器DatabaseMeta(String xml)
	 */
	 public static final String[] databasesXML = {
	        "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
	          "<connection>" +
	            "<name>bjdt</name>" +
	            "<server>192.168.1.101</server>" +
	            "<type>Oracle</type>" +
	            "<access>Native</access>" + 
	            "<database>orcl</database>" +
	            "<port>1521</port>" +
	            "<username>bjdtuser</username>" +
	            "<password>password</password>" +
	          "</connection>",
	          "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
	          "<connection>" +
	            "<name>kettle</name>" +
	            "<server>192.168.1.101</server>" +
	            "<type>Oracle</type>" +
	            "<access>Native</access>" + 
	            "<database>orcl</database>" +
	            "<port>1521</port>" +
	            "<username>kettleuser</username>" +
	            "<password>password</password>" +
	          "</connection>"
	    };	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			KettleEnvironment.init();
			transDemo = new TransDemo();
			TransMeta transMeta = transDemo.generateMyOwnTrans();
			String transXml = transMeta.getXML();
			//System.out.println("transXml:"+transXml);
			String transName = "etl/update_insert_Trans.ktr";
			File file = new File(transName);
			FileUtils.writeStringToFile(file, transXml, "UTF-8");
			
		//	System.out.println(databasesXML.length+"\n"+databasesXML[0]+"\n"+databasesXML[1]);
		} catch (Exception e) {
			e.printStackTrace();
			return;
		}
		
	}
	
	/**
	 * 生成一个转化,把一个数据库中的数据转移到另一个数据库中,只有两个步骤,第一个是表输入,第二个是表插入与更新操作
	 * @return
	 * @throws KettleXMLException 
	 */
	public TransMeta generateMyOwnTrans() throws KettleXMLException{
		
		System.out.println("************start to generate my own transformation***********");
		
		TransMeta transMeta = new TransMeta();
		
		//设置转化的名称 
		transMeta.setName("insert_update");
		
		//添加转换的数据库连接
        for (int i=0;i<databasesXML.length;i++){
            DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]);
            transMeta.addDatabase(databaseMeta);
        }
		
		//registry是给每个步骤生成一个标识Id用
		PluginRegistry registry = PluginRegistry.getInstance();
		
		//******************************************************************
		
		//第一个表输入步骤(TableInputMeta)
		TableInputMeta tableInput = new TableInputMeta();
		String tableInputPluginId = registry.getPluginId(StepPluginType.class, tableInput);
		//给表输入添加一个DatabaseMeta连接数据库
		DatabaseMeta database_bjdt = transMeta.findDatabase("bjdt");
		tableInput.setDatabaseMeta(database_bjdt);
		String select_sql = "SELECT ID, USERNAME, PASSWORD, SEX, AGE, TELEPHONE, ADDRESS FROM "+bjdt_tablename;
		tableInput.setSQL(select_sql);
		
		//添加TableInputMeta到转换中
		StepMeta tableInputMetaStep = new StepMeta(tableInputPluginId,"table input",tableInput);
		
		//给步骤添加在spoon工具中的显示位置
		tableInputMetaStep.setDraw(true);
		tableInputMetaStep.setLocation(100, 100);
		
		transMeta.addStep(tableInputMetaStep);
		//******************************************************************
		
		//******************************************************************
		//第二个步骤插入与更新
		InsertUpdateMeta insertUpdateMeta = new InsertUpdateMeta();
		String insertUpdateMetaPluginId = registry.getPluginId(StepPluginType.class,insertUpdateMeta);
		//添加数据库连接
		DatabaseMeta database_kettle = transMeta.findDatabase("kettle");
		insertUpdateMeta.setDatabaseMeta(database_kettle);
		//设置操作的表
		insertUpdateMeta.setTableName(kettle_tablename);
		
		//设置用来查询的关键字
		insertUpdateMeta.setKeyLookup(new String[]{"ID"});
		insertUpdateMeta.setKeyStream(new String[]{"ID"});
		insertUpdateMeta.setKeyStream2(new String[]{""});//一定要加上
		insertUpdateMeta.setKeyCondition(new String[]{"="});
		
		//设置要更新的字段
		String[] updatelookup = {"ID","USERNAME","PASSWORD","SEX","AGE","TELEPHONE","ADDRESS"} ;
 		String [] updateStream = {"ID","USERNAME","PASSWORD","SEX","AGE","TELEPHONE","ADDRESS"};
 		Boolean[] updateOrNot = {false,true,true,true,true,true,true};
 		insertUpdateMeta.setUpdateLookup(updatelookup);
		insertUpdateMeta.setUpdateStream(updateStream);
		insertUpdateMeta.setUpdate(updateOrNot);
		String[] lookup = insertUpdateMeta.getUpdateLookup();
		//System.out.println("******:"+lookup[1]);
		//System.out.println("insertUpdateMetaXMl:"+insertUpdateMeta.getXML());
		//添加步骤到转换中
		StepMeta insertUpdateStep = new StepMeta(insertUpdateMetaPluginId,"insert_update",insertUpdateMeta);
		insertUpdateStep.setDraw(true);
		insertUpdateStep.setLocation(250,100);
		transMeta.addStep(insertUpdateStep);
		//******************************************************************
		
		//******************************************************************
		//添加hop把两个步骤关联起来
		transMeta.addTransHop(new TransHopMeta(tableInputMetaStep, insertUpdateStep));
		System.out.println("***********the end************");
		return transMeta;
	}
}


原文链接:http://bbs.youkuaiyun.com/topics/390369075
还不会使用大数据ETL工具Kettle,你就真的out了! Kettle 必知必会! 阅读详情

相关推荐

Kettle——大数据ETL工具

kettle概念组件介绍,kettle下载安装以及简单使用。

Chlin.Rei的博客 6219

ETL工具 - JAVA 调用 Kettle 转换、作业脚本

JAVA 调用 Kettle 转换、作业脚本。

小毕超博客 4801

ETL工具--kettle篇

ETL是EXTRACT(抽取)、TRANSFORM(转换)、LOAD(加载)的简称,实现数据从多个异构数据源加载到数据库或其他目标地址,是数据仓库建设和维护中的重要一环也是工作量较大的一块。当前知道的ETL工具有informatica, datastage,kettle,ETL Automation,sqoop,SSIS等等。这里我们聊聊kettle的学习吧(如果你有一定的kettle使用,推荐看...

ddonking的专栏 1万+

使用kettle制作简单的同步转换示例并且在java项目中运行

Java集成Kettle,使用JNDI配置数据库连接的形式执行ktr。通过配置方便开发环境上线时不用更改ktr文件。

konw_的博客 2448

ETL工具Kettle的下载和使用

Kettle最早是一个开源、免费的ETL工具。在2006年,Pentaho公司收购了Kettle项目,从此,Kettle成为企业级数据集成及商业智能套件Pentaho的主要组成部分,Kettle亦重命名为PentahoDataIntegration。PentahoDataIntegration以Java开发,支持跨平台运行,其特性包括支持100%无编码、拖拽方式开发ETL数据管道;可对接包括传统数据库、文件、大数据平台、接口、流数据等数据源;支持ETL数据管道加入机器学习算法。...

m0_69586799的博客 4966

ETL与kettle介绍

ETl介绍,数据仓库清洗数据工具,以及kettle介绍

千生百世,缘起缘灭,皆已注定。 3474

代码生成ktr文件

目录 代码生成ktr spoon界面查看 代码生成ktr 从之前的一个Kettle交换代码来看,应该可以生成ktr文件,在spoon页面上展示。 代码如下: /** * hive之间的交换 * @throws KettleException */ @Test public void exchangeMysql2Mysql() throws KettleException{ //源数据库连接 Strin...

lw18751836671的专栏 4858

ETL-Kettle学习

kettle学习视频一、ETL 了解(数据仓库技术)二、Kettle(工具)三、Kettle脚本流程四、Kettle组件五、Kettle目录六、Kettle界面七、操作1.转换2.步骤3.跳4.数据类型5.并行6.作业八、Kettle转换1.Kettle输入控件csv文件输入文本文件输入Excl输入XML输入JSON输入表输入-数据库2.Kettle输出控件Excl输出文本文件输出SQL文件输出表输出插入-更新 、 更新删除3.转换控件 transformconcat fields 合并字段值映射增加常量

sam80000的博客 3052

【ETL工具】-Kettle详细教程

Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

zuo1057559550的博客 2万+

java程序生成kettle转换ktr文件

NULL 博文链接:https://zihai367.iteye.com/blog/2262856

ETL工具kettle的jar汇总.rar(亲测有效)

ETL中所有常用jar,直接导入项目加上自己要连接的数据库连接驱动Jar就可以用了。上一篇jar中存在包打架版本不兼容问题,本章亲测有效,更新更多需要jar包。

ETL工具kettle与JAVA结合使用程序生成转换

最近公司领导安排打造ETL支撑平台,使用ETL工具kettle6.0对数据库的数据进行清洗,使用工具spoon来使用一些图形化的操作比较简单,抽空研究了下用使用kettle的一些jar包,把kettle结合到java(web项目一样)程序中。留作一个记录,以后备用查看。 先看看网站上下了很多资料看http://infocenter.pentaho.com/help/index.jsp?t......

Hello_Error 7374

脑电分析中的频谱特征提取 —— 从理论到实践

本文系统介绍了脑电信号(EEG)频谱特征提取方法及其应用。EEG信号通过频谱分析可分为Delta、Theta、Alpha、Beta和Gamma等具有明确生理意义的频段。文章详细讲解了功率谱密度、频带功率、相对功率、频谱熵等关键特征的计算方法,并提供了Python实现示例,包括模拟数据和真实CHB-MIT癫痫数据集的处理流程。这些频谱特征在脑机接口、情绪识别、疲劳监测和癫痫检测等领域具有重要应用价值。文章强调频谱特征结合时域和非线性特征可提升分析效果,为EEG研究提供了实用指导。

qq_32516809的博客 1441

ETL工具之Kettle

Kettle是一款国外开源的ETL工具,纯Java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。

qq1196676009的博客 1万+

[原创]Linux 802.11n CSI tool安装教程(亲测可用)

Linux 802.11n CSI tool安装教程 前言 网上关于Intel5300 CSI tool的教程繁多,实际有效的可以说极少,各种疏漏错误。装的时候被坑无数次,终于调通。其实装这个工具并不太难,但是很多人把它弄得极其复杂,所以写这篇博客来帮助和我有一样困扰的人。我基本沿用的是官方文档旧版本的安装方案,针对其冗杂之处做了大量改进。 旧版安装教程: http://dhalperi....

u014645508的博客 4万+

神经算子:突破科学计算瓶颈的函数空间映射技术

神经算子(Neural Operators)是深度学习在科学计算领域的重要突破,它从根本上改变了处理连续物理问题的方式。与传统神经网络学习离散数据点映射不同,神经算子学习的是函数空间到函数空间的映射,这种范式转换使其具备离散化收敛性和超分辨率预测能力。在计算流体力学、天气预报等需要求解偏微分方程的场景中,神经算子能够在保持精度的同时将计算速度提升数个数量级。傅里叶神经算子(FNO)通过快速傅里叶变换实现高效计算,特别适合规则网格问题;而图神经算子(GNO)则擅长处理不规则网格和复杂几何形状。这种技术为参数敏

cuililai5127的博客 442

可视化ETL平台-Kettle的安装及简单使用

本文介绍了kettle的安装、txt转换为Excel文件、Excel转换为Mysql文件、Mysql表与表数据转换及其他操作等。

m0_63845988的博客 5463

基于Autoware制作高精地图(一)

基于Autoware制作高精地图(一) ​开始进入正题,也是最近在忙的一件事,制作高精地图。 高精地图的制作大概分为以下四个流程(不一定完全正确): 1.构建点云地图; 2.点云地图标注; 3.制作OpenDrive地图; 4.地图存储索引。 这篇文章主要讲解如何构建点云地图。 首先我们要有一段自己录制的激光雷达点云数据,这里推荐大家采用Velodyne16线激光雷达,因为这里我们构建的点云底图是三维的,而采用Velodyne而不是速腾聚创(rslidar)等其他品牌的原因是Autoware里面有一个选项是

weixin_44570248的博客 7797

ETL工具——Kettle的简单使用

1.Kettle概述 1.1. 什么是kettle Kettle是一款免费开源的基于Java的企业级ETL(Extract-Transform-Load的缩写,即数据抽取、转换、装载的过程)可视化工具,功能强大简单易用。 1.2. Kettle的特点 1.3. Kettle的组成 勺子(Spoon.bat/spoon.sh):kettle图形化界面,使用图形化方式开发转换和作业。 煎锅(Pan.bat/pan.sh):使用命令行的方式调用转换。 厨房(kitchen.ba

binaryfire的博客 4344

blenderproc 制作位姿估计数据集

blenderproc 制作位姿估计数据集 准备工作 1.首先需要去下载blenderproc的源码blenderproc,按照作者的readme文件进行编译。 2.其次需要下载bop_toolkit源码,链接如下bop_toolkit 3.说明:blenderproc主要用来生成数据,包括depth,rgb,位姿标签文件(scene_gt.json),bop_toolkit主要用来生成mask和mask_visib,scene_gt_info.json,用于判断物体的可见区域比例,如果遮挡太多考虑去掉。做

qq_43814359的博客 5697

向NCBI上传16S rDNA数据的操作详解

专门介绍向NCBI上传16S rDNA数据的方法不太多。因为自己有上传数据的需要,所以决定边摸索边写下操作流程。如果这篇博文交代了上传步骤以及一些描述文件属性的书写,帮到你的话,还请点赞收藏。

yue81560的博客 2万+

ETL工具一一kettle的使用

文章目录1、ETL及其常用工具2、kettle的下载安装2.1 kettle简介2.2 kettle下载安装3、kettle的使用3.1 kettle之转换的基本概念3.2 输入控件的使用3.3 输出控件的使用3.4 脚本控件的使用3.5 案例13.6 案例2 1、ETL及其常用工具 ETL:Extract-Transform-Load的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL是将业务系统的数据经过抽取、清洗转换后加载到数据

weiyifang11的博客 1926

3D结构光 vs TOF——手机厂商为何选择TOF方案?

3D视觉感知技术路线分析:结构光与TOF对比 3D视觉感知领域存在结构光和TOF两大主流技术。结构光基于三角定位法,精度高(毫米级)但工作距离短(<1.5米),适合人脸识别等近距离场景;TOF通过测量光脉冲飞行时间计算深度,精度中等(厘米级)但工作距离长(0.5-5米+),更适合AR导航等中远距离应用。手机厂商选型时考虑:前置认证选择结构光(如苹果FaceID),后置场景倾向TOF(安卓阵营),因后者更适配全面屏设计、环境适应性强且成本优势明显。两种技术互补共存,共同推动3D感知应用发展。

致力于lidar应用开发 111

【ETl工具Kettle的使用技巧】

ETL是英文Extract-Transform-Load的缩写,用来描述将数据从源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程,它能够对各种分布的、异构的源数据(如关系数据)进行抽取,按照预先设计的规则将不完整数据、重复数据以及错误数据等“脏"数据内容进行清洗,得到符合要求的“干净”数据,并加载到数据仓库中进行存储,这些“干净”数据就成为了数据分析、数据挖掘的基石。

书生的技术分享 1991

【YOLOv8科研级优化】基于YOLOv9的GELAN模块重构C2f结构,实现精度与效率的同步提升

打开确保模型解析器能识别GELANBlock模块。通过将YOLOv9的GELAN模块集成到YOLOv8的C2f模块中,我们实现了一个“强特征表达+高效计算”的目标检测模型。这个改进不仅在工程上能提升复杂场景下的检测效果,更在科研上提供了“多分支特征融合”的创新思路——这种思路可以延伸到其他检测网络(如Faster R-CNN、SSD)的改进中,帮你在论文中打造独特的研究点。

know_F0727的博客 201

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

上一篇: 敏捷文档编制路线图
下一篇: 为什么要努力?
铭记北宸
博客等级 码龄18年 289粉丝 148原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值