Kettle的第一个实践--从FTP上取文件,再放至另一个FTP上

Kettle的第一个实践--从FTP上取文件,再放至另一个FTP上


这个实践其实不难,主要是有一个地方要注意,就是文件名通配符的写法,如果文件名格式为“TRANS_yyyymmdd.txt”,如TRANS_20081101.txt。
如果想匹配所有以TRANS开头的文本文件,在kettle中要写成这样:TRANS_.*[0-9].txt。


后在windows操作系统中配置定时任务就可以定期执行该Job了。

Job的图:


[img]http://dl.iteye.com/upload/attachment/0081/1496/3da20dca-5419-3bb0-9fe8-bfd8dcb91a15.jpg[/img]


FTP配置信息:

[img]http://dl.iteye.com/upload/attachment/0081/1498/8f888612-0081-3381-9a32-e2d5d88bbb30.jpg[/img]

[img]http://dl.iteye.com/upload/attachment/0081/1500/d938a271-9e9e-31a3-be10-ac3534e64a2a.jpg[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用 Apache Commons Net 库来实现 Kettle(也称为Pentaho Data Integration)与FTP服务器之间的文件同步。下面是一个示例代码片段,展示了如何使用Kettle来同步FTP上的文件: ```java import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.pentaho.di.core.exception.KettleException; import org.pentaho.di.core.plugins.PluginRegistry; import org.pentaho.di.core.plugins.StepPluginType; import org.pentaho.di.core.row.RowMetaInterface; import org.pentaho.di.core.row.ValueMetaInterface; import org.pentaho.di.trans.Trans; import org.pentaho.di.trans.TransMeta; import org.pentaho.di.trans.step.StepMeta; import org.pentaho.di.trans.step.StepMetaInterface; import org.pentaho.di.trans.steps.fileinput.text.TextFileInputField; public class FTPSyncExample { public static void main(String[] args) throws KettleException { // 创建Kettle转换元数据对象 TransMeta transMeta = new TransMeta(); transMeta.setName("FTP Sync"); // 创建FTP输入步骤 PluginRegistry registry = PluginRegistry.getInstance(); StepMetaInterface stepMetaInterface = registry.getPlugin(StepPluginType.class, "TextFileInput", null); StepMeta stepMeta = new StepMeta("FTP Input", stepMetaInterface); transMeta.addStep(stepMeta); // 配置FTP输入步骤的参数 TextFileInputField[] inputFields = new TextFileInputField[1]; inputFields[0] = new TextFileInputField(); inputFields[0].setName("filename"); inputFields[0].setType(ValueMetaInterface.TYPE_STRING); inputFields[0].setLength(100); inputFields[0].setTrimType(ValueMetaInterface.TRIM_TYPE_BOTH); inputFields[0].setFormat(""); inputFields[0].setCurrencySymbol(""); inputFields[0].setDecimalSymbol("."); inputFields[0].setGroupSymbol(""); inputFields[0].setRepeated(false); inputFields[0].setNullString(""); ((TextFileInputMeta) stepMetaInterface).setInputFields(inputFields); // 创建FTP客户端对象 FTPClient ftpClient = new FTPClient(); try { // 连接FTP服务器 ftpClient.connect("ftp.example.com", 21); ftpClient.login("username", "password"); ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 获FTP服务器上的文件列表 String[] fileNames = ftpClient.listNames(); // 创建转换步骤之间的连接 transMeta.addTransHop(new TransHopMeta(stepMeta, null)); // 创建Kettle转换对象并执行 Trans trans = new Trans(transMeta); trans.execute(null); // 为每个文件创建一个行记录并传递给Kettle转换 for (String fileName : fileNames) { Object[] rowData = new Object[1]; rowData[0] = fileName; RowMetaInterface rowMeta = trans.getTransMeta().getStepFields(stepMeta); trans.addRow(rowMeta, rowData); } // 等待转换完成 trans.waitUntilFinished(); // 处理转换结果 if (trans.getErrors() > 0) { System.out.println("转换期间发生错误!"); } else { System.out.println("转换成功完成!"); } } catch (Exception e) { e.printStackTrace(); } finally { // 断开FTP连接 try { if (ftpClient.isConnected()) { ftpClient.logout(); ftpClient.disconnect(); } } catch (IOException e) { e.printStackTrace(); } } } } ``` 请注意,上述示例代码中的一些类和方法是伪代码,需要根据你的实际情况进行调整和扩展。此外,你还需要将示例中的主机名、端口、用户名和密码更改为实际的FTP服务器凭据。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值