在生产环境中,我们经常会遇到数据定时同步的问题,这里整理出一个通用的FTP上传同步的程序(FTP下载入库的同步同理),供大家参考。本文以Windows环境为例进行日粒度同步数据。另外,本文所示例子,默认没有使用资源库。
一、实现的功能是什么?
定时从数据库获取时间范围内的数据,然后将数据生成指定格式的文本文件,并将文件上传到指定的FTP服务器上。
二、需要准备什么环境?
KETTLE运行环境;其他如通畅的网络,数据库信息,FTP信息,指定的文本格式,同步周期,均属于需求范畴,不予赘述。
三、本程序的特点
1、可通过配置文件控制多节点采集(并行 or 串行皆可)
2、可补采已过日期的数据
3、可留存执行日志
4、可指定文件名称和文本格式
四、程序概述
1、程序组成
包含一个入口脚本,两个作业(Job),三个转换(Transformation),三个文件夹(日志Logs,配置Configs,文件留存Files)。如下图所示:
2、各组成的关系如下图所示
3、配置文件说明
\Configs\Allconfigs.xml
各项解释看注释,修改配置文件filled和filled_date节点还可以进行补采数据。
踩过的坑:关于分隔符,低版本的KETTLE可能不支持一些特殊字符,比如欧元符号 “€”;嗯,数据量不是特别大的话替换字符即可,大数据可能有效率困扰。
<?xml version="1.0" encoding="utf-8" ?><root> <type name ="ftp1"> <ftp> <ftp_ip>127.0.0.1</ftp_ip> <ftp_port>21</ftp_port> <ftp_user>ftpuser</ftp_user> <ftp_pass>ftpuser</ftp_pass> <!--远程路径,ftp工具登录后获取的路径,不是ftp站点的物理地址--> <remote_filepath>/test</remote_filepath> <!--本地文件路径--> <local_filepath>/Files</local_filepath> </ftp> <file> <!--默认1,表示获取的是昨天的数据;0表示获取今天的数据;2表示获取前天的数据;以此类推--> <file_interval>1</file_interval> <!--文件前缀--> <file_ux>us_</file_ux> <!--文件后缀--> <file_dx>_dx</file_dx> <!--字段分隔符--> <file_split>,</file_split> <!--文件扩展名:csv,txt,log等--> <file_ex>csv</file_ex> <!--文件中日期格式 比如 ux_yyyyMMdd_ex;此日期为采集的时间点--> <file_dateset>yyyyMMddhh</file_dateset> </file> <fix> <!--是否补采,默认0,其他表示需要补采,补采则使用filled_date作为日期--> <filled>0</filled> <!--如果补采,补采的日期是哪天,格式:yyyyMMddhhmmss--> <filled_date></filled_date> </fix> </type></root>