目录
代码生成ktr
spoon界面查看
代码生成ktr
从之前的一个Kettle交换代码来看,应该可以生成ktr文件,在spoon页面上展示。
代码如下:
@Test
public void exchangeMysql2Mysql() throws KettleException{
//源数据库连接
String mysql_src = "" +
"" +
"mysql_src " +
"192.168.10.92 " +
"MySQL " +
"Native" +
"test " +
"3306 " +
"root " +
"123456 " +
" ";
//目标数据库连接
String mysql_dest = "" +
"" +
"mysql_dest " +
"192.168.10.92 " +
"MySQL " +
"Native" +
"test " +
"3306 " +
"root " +
"123456 " +
" ";
Databasemeta srcDatabasemeta = new Databasemeta(mysql_src);
Databasemeta destDatabasemeta = new Databasemeta(mysql_dest);
//创建转换元信息
Transmeta transmeta = new Transmeta();
transmeta.setName("mysql8之间的交换");
//设置源和目标
transmeta.addDatabase(srcDatabasemeta);
transmeta.addDatabase(destDatabasemeta);
PluginRegistry registry = PluginRegistry.getInstance();
TableInputmeta tableInputmeta = new TableInputmeta();
String tableInputPluginId = registry.getPluginId(StepPluginType.class,
tableInputmeta);
tableInputmeta.setDatabasemeta(srcDatabasemeta);
//设置查询条件
String selectSql = "select id ,name from user_info_src";
tableInputmeta.setSQL(selectSql);
Stepmeta tableInputStepmeta = new Stepmeta(tableInputPluginId,
"tableInput", (StepmetaInterface) tableInputmeta);
//给步骤添加在spoon工具中的显示位置
tableInputStepmeta.setDraw(true);
tableInputStepmeta.setLocation(100, 100);
transmeta.addStep(tableInputStepmeta);
TableOutputmeta tableOutputmeta = new TableOutputmeta();
tableOutputmeta.setDatabasemeta(destDatabasemeta);
//设置目标表的 schema和表名
tableOutputmeta.setSchemaName(null);
tableOutputmeta.setTablename("user_info_dest");
String tableOutputPluginId = registry.getPluginId(StepPluginType.class, tableOutputmeta);
Stepmeta tableOutputStep = new Stepmeta(tableOutputPluginId, "tableOutput" , (StepmetaInterface) tableOutputmeta);
//给步骤添加在spoon工具中的显示位置
tableOutputStep.setDraw(true);
tableOutputStep.setLocation(200, 200);
//将步骤添加进去
transmeta.addStep(tableOutputStep);
//将步骤和上一步关联起来
transmeta.addTransHop(new TransHopmeta(tableInputStepmeta, tableOutputStep));
String xml = transmeta.getXML();
System.out.println(xml);
}
上述代码是完整版,但其实只需要在之前的交换代码中添加指定Stepmeta节点的位置即可,
//给步骤添加在spoon工具中的显示位置 tableInputStepmeta.setDraw(true); tableInputStepmeta.setLocation(100, 100); //给步骤添加在spoon工具中的显示位置 tableOutputStep.setDraw(true); tableOutputStep.setLocation(200, 200);
当我们看ktr文件时,发现是一个xml内容,所以试着在Transmeta中获取XML内容,
String xml = transmeta.getXML(); System.out.println(xml);
输出的XML如下,这个就是ktr的内容,只不过和spoon界面生成的少了一个头部,
mysql8之间的交换 Normal /
ID_BATCH Y ID_BATCH CHANNEL_ID Y CHANNEL_ID TRANSNAME Y TRANSNAME STATUS Y STATUS LINES_READ Y LINES_READ LINES_WRITTEN Y LINES_WRITTEN LINES_UPDATED Y LINES_UPDATED LINES_INPUT Y LINES_INPUT LINES_OUTPUT Y LINES_OUTPUT LINES_REJECTED Y LINES_REJECTED ERRORS Y ERRORS STARTDATE Y STARTDATE ENDDATE Y ENDDATE LOGDATE Y LOGDATE DEPDATE Y DEPDATE REPLAYDATE Y REPLAYDATE LOG_FIELD Y LOG_FIELD EXECUTING_SERVER N EXECUTING_SERVER EXECUTING_USER N EXECUTING_USER CLIENT N CLIENT
ID_BATCH Y ID_BATCH SEQ_NR Y SEQ_NR LOGDATE Y LOGDATE TRANSNAME Y TRANSNAME STEPNAME Y STEPNAME STEP_COPY Y STEP_COPY LINES_READ Y LINES_READ LINES_WRITTEN Y LINES_WRITTEN LINES_UPDATED Y LINES_UPDATED LINES_INPUT Y LINES_INPUT LINES_OUTPUT Y LINES_OUTPUT LINES_REJECTED Y LINES_REJECTED ERRORS Y ERRORS INPUT_BUFFER_ROWS Y INPUT_BUFFER_ROWS OUTPUT_BUFFER_ROWS Y OUTPUT_BUFFER_ROWS
ID_BATCH Y ID_BATCH CHANNEL_ID Y CHANNEL_ID LOG_DATE Y LOG_DATE LOGGING_OBJECT_TYPE Y LOGGING_OBJECT_TYPE OBJECT_NAME Y OBJECT_NAME OBJECT_COPY Y OBJECT_COPY REPOSITORY_DIRECTORY Y REPOSITORY_DIRECTORY FILENAME Y FILENAME OBJECT_ID Y OBJECT_ID OBJECT_REVISION Y OBJECT_REVISION PARENT_CHANNEL_ID Y PARENT_CHANNEL_ID ROOT_CHANNEL_ID Y ROOT_CHANNEL_ID
ID_BATCH Y ID_BATCH CHANNEL_ID Y CHANNEL_ID LOG_DATE Y LOG_DATE TRANSNAME Y TRANSNAME STEPNAME Y STEPNAME STEP_COPY Y STEP_COPY LINES_READ Y LINES_READ LINES_WRITTEN Y LINES_WRITTEN LINES_UPDATED Y LINES_UPDATED LINES_INPUT Y LINES_INPUT LINES_OUTPUT Y LINES_OUTPUT LINES_REJECTED Y LINES_REJECTED ERRORS Y ERRORS LOG_FIELD N LOG_FIELD
ID_BATCH Y ID_BATCH CHANNEL_ID Y CHANNEL_ID LOG_DATE Y LOG_DATE METRICS_DATE Y METRICS_DATE METRICS_CODE Y METRICS_CODE METRICS_DEscriptION Y METRICS_DEscriptION METRICS_SUBJECT Y METRICS_SUBJECT METRICS_TYPE Y METRICS_TYPE METRICS_VALUE Y METRICS_VALUE
0.0 0.0 10000 50 50 N Y 50000 Y N 1000 100 - 2021/11/12 11:38:37.820 - 2021/11/12 11:38:37.820 mysql_dest 192.168.10.92 MYSQL Nativetest 3306 root Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c PORT_NUMBER3306 mysql_src 192.168.10.92 MYSQL Nativetest 3306 root Encrypted 2be98afc86aa7f2e4cb79ff228dc6fa8c PORT_NUMBER3306 tableInput tableOutput Y tableInput TableInput Y 1 none mysql_src select id ,name from user_info_src N N N 100 100 Y tableOutput TableOutput Y 1 none mysql_dest user_info_dest
1000 N N Y N N N N N N N 200 200 Y N
这里没有写到文件中,直接输出到控制台,然后拷贝到txt文件中,加上这个头部,最后把文件后缀名改为ktr。
spoon界面查看
可以看到在spoon工具中是能展示的,
表输入就是在代码中写的SQL,
数据库连接也是在代码XML 中写的,
表输出也正常,
所以在代码中生成一个ktr文件就完成,这样就能很直观的看到代码生成和界面的区别,也能很快的找到错误。



