Kettle API- Java调用示例
更新时间:2023-11-15 12:12:01 阅读量: 教育文库 文档下载
- kettle推荐度:
- 相关推荐
Kettle API - Java调用示例
对向前兼容性的推荐 :如果想要动态地创造Transformation (例如:从元数据),使用XML文件方法(KTR)而不是使用API。 XML文件兼容Kettle所有版本,同样对job有效的。
1. 下面的例子进行以下操作:
1创建Transformation
2保存Transformation信息到XML文件 3获取在目标表操作的SQL 4执行Transformation
5drop目标表,使这个示例可以重复。
// 创建“复制表”的 transformation元数据.
TransMeta transMeta = TransBuilder.buildCopyTable( transformationName, sourceDatabaseName, sourceTableName, sourceFields,
targetDatabaseName, targetTableName, targetFields );
// 保存为文件:
String xml = transMeta.getXML();
DataOutputStream dos = new DataOutputStream(new FileOutputStream(new File(fileName))); dos.write(xml.getBytes(\dos.close();
System.out.println(\
//获取在目标表操作的SQL
String sql = transMeta.getSQLStatementsString();
// 在目标表执行sql:
Database targetDatabase = new Database(transMeta.findDatabase(targetDatabaseName)); targetDatabase.connect();
targetDatabase.execStatements(sql); //现在执行 transformation
Trans trans = new Trans(transMeta); trans.execute(null);
trans.waitUntilFinished();
//为了重复测试,再次drop目标表
targetDatabase.execStatement(\targetDatabase.disconnect();
下面是创建Transformation的方法的代码: /**
* Creates a new Transformation using input parameters such as the tablename to read from. * @param transformationName transformation的名称 * @param sourceDatabaseName 输入的 database 名称 * @param sourceTableName 要读取的表名 * @param sourceFields 要读取的列名
* @param targetDatabaseName 目标database名 * @param targetTableName要写入的表名
* @param targetFields要写入的列名(要跟读取的列长度相同) * @return A new transformation metadata object
* @throws KettleException In the rare case something goes wrong */
public static final TransMeta buildCopyTable(String transformationName, String sourceDatabaseName, String sourceTableName, String[] sourceFields, String targetDatabaseName, String targetTableName, String[] targetFields) throws KettleException { EnvUtil.environmentInit(); try { // Create a new transformation... // TransMeta transMeta = new TransMeta(); transMeta.setName(transformationName); // 添加数据库连接 for (int i = 0; i < databasesXML.length; i++) { DatabaseMeta databaseMeta = new DatabaseMeta(databasesXML[i]); transMeta.addDatabase(databaseMeta); } DatabaseMeta sourceDBInfo = transMeta.findDatabase(sourceDatabaseName); DatabaseMeta targetDBInfo = transMeta.findDatabase(targetDatabaseName); // //添加注释 // String note = \sourceDBInfo + \ note += \that, it writes the information to table [\targetTableName + \on
database [\ NotePadMeta ni = new NotePadMeta(note, 150, 10, -1, -1); transMeta.addNote(ni); // // 创建读取数据源的 step... // String fromstepname = \ TableInputMeta tii = new TableInputMeta(); tii.setDatabaseMeta(sourceDBInfo); String selectSQL = \ for (int i = 0; i < sourceFields.length; i++) { if (i > 0) selectSQL += \ selectSQL += sourceFields[i] + Const.CR; } selectSQL += \ tii.setSQL(selectSQL); StepLoader steploader = StepLoader.getInstance(); String fromstepid = steploader.getStepPluginID(tii); StepMeta fromstep = new StepMeta(log, fromstepid, fromstepname,(StepMetaInterface) tii); fromstep.setLocation(150, 100); fromstep.setDraw(true); fromstep.setDescription(\information from table [\+ sourceTableName + \database [\ transMeta.addStep(fromstep); // // 添加 重命名 fields的逻辑 // Use metadata logic in SelectValues, use SelectValueInfo... // SelectValuesMeta svi = new SelectValuesMeta(); svi.allocate(0, 0, sourceFields.length); for (int i = 0; i < sourceFields.length; i++) { svi.getMetaName()[i] = sourceFields[i]; svi.getMetaRename()[i] = targetFields[i]; } String selstepname = \
String selstepid = steploader.getStepPluginID(svi); StepMeta selstep = new StepMeta(log, selstepid, selstepname, (StepMetaInterface) svi); selstep.setLocation(350, 100); selstep.setDraw(true); selstep.setDescription(\ transMeta.addStep(selstep); TransHopMeta shi = new TransHopMeta(fromstep, selstep); transMeta.addTransHop(shi); fromstep = selstep; // // 创建 写数据的 step... // // // 添加 输出表 step... // String tostepname = \ TableOutputMeta toi = new TableOutputMeta(); toi.setDatabase(targetDBInfo); toi.setTablename(targetTableName); toi.setCommitSize(200); toi.setTruncateTable(true); String tostepid = steploader.getStepPluginID(toi); StepMeta tostep = new StepMeta(log, tostepid, tostepname, (StepMetaInterface) toi); tostep.setLocation(550, 100); tostep.setDraw(true); tostep.setDescription(\[\ transMeta.addStep(tostep); // // 添加连线... // TransHopMeta hi = new TransHopMeta(fromstep, tostep); transMeta.addTransHop(hi); // The transformation is complete, return it... return transMeta;
} catch (Exception e) { throw new KettleException(%unexpected error occurred creating the new transformation\ } }
2. 运行现有的Transformation
如果已经创建了Transformation,并且保存它在.ktr或.xml文件,能使用象下面的代码。
public static void runTransformation(String filename) { try {
StepLoader.init();
EnvUtil.environmentInit();
TransMeta transMeta = new TransMeta(filename); Trans trans = new Trans(transMeta);
trans.execute(null); // You can pass arguments instead of null. trans.waitUntilFinished(); if ( trans.getErrors() > 0 ) {
throw new RuntimeException( \ } }
catch ( KettleException e ) { System.out.println(e); } }
正在阅读:
Kettle API- Java调用示例11-15
2020年领导干部三个以案警示教育专题民主生活会个人对照检查材料08-28
典型电信号的观察与测量05-10
苏教版一年级数学上册期末试卷01-04
(实验三)循环结构程序设计03-26
罗维朋比色计使用方法11-17
幼儿园小班艺术《美术:气球变葡萄》活动教案精品教学设计儿童学前班优秀公开课05-30
01--第一章宏观经济学导论05-30
《电工基础》(劳动版第四版)43 §5—1 单相交流电的基本概念(产生、解析式、图像)08-26
“男生、女生”主题班会教案.doc04-30
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 示例
- 调用
- Kettle
- Java
- API
- 2014兰大网院人力资源管理课程作业 - C
- 印花知识 摘自服装工程网
- 2018-2024年中国便携式自动导航系统(PND)市场研究与投资战略咨询报告(目录)
- 2018年10月自考《建筑法规》真题
- 供应商空白资料表
- quartus IP核破解问题 - 图文
- 操作系统实验三 - 图文
- 同一控制下的控股合并条件下合并财务报表的编制
- 唐诗宋词人文解读(含题目选项)
- CAD使用技巧
- 小学班主任工作现状调查报告
- 微生物学习题
- 2017科目三广州华观路考点难点
- 气垫导轨实验讲义
- 《营养含量》教学设计
- 2017产科应急预案演练脚本
- 统计学期考试题1(附答案)
- “十大指标”检查评价制度
- 2018届高考数学二轮复习平面向量学案含答案(全国通用)
- 物理化学课后习题解答