背景:
用户将一批数据通过ftp的方式提供给我方,我方需要按照数据的不同类型抽取到不同业务表中。
思路:
通过ftp登陆到对方文件库中,将对方的文件名称拷贝过来
与我方抽取的文件名称对应,无则下载并抽取到数据库中
过程
按照上面思路设计ftp脚本,脚本执行成功,可是在添加到执行计划就没有执行
单击脚本命令可以生成文本文件,在执行任务中添加任务点击运行也可以文本文件,但是自己运行时就没有出现文本文件,现在卡在这个关口上面。
1)
重新设置数据抽取方案
由于ftp中文件较少,文件内容较小,全量加载
这样就可以将所有文件下载下来,总共200m左右的文件,下载时间差不多是5min(记住服务器不同,可能时间不太一样,只作参考)
其他步骤就比较简单
2)重新检查方执行计划发现没有设置无限性,导致程序没有运行
bat文件内容
@echo off
set h=xxx
set u=xxxx
set p=xxxx123
echo open %h%>ftp.txt
echo %u%>>ftp.txt
echo %p%>>ftp.txt
echo dir>>ftp.txt
echo bye>>ftp.txt
ftp -s:ftp.txt>e:\ftpdir.txt
echo open %h%>ftp.txt
echo %u%>>ftp.txt
echo %p%>>ftp.txt
for /f "tokens=4" %%i in ('findstr "<DIR>" ftpdir.txt') do (
echo cd %%~i>>ftp.txt
echo dir>>ftp.txt
echo cd ..>>ftp.txt)
echo bye>>e:\ftp.txt
ftp -s:ftp.txt>e:\ftpfile.txt
这样就可以读取e:\ftpdir.txt文件,通过与之前的数据比较查找那个是新的文件了
获取到新的文件名称就需要将其放到ftp控件去下载,ftp控件中有通配符,考虑到文件名称可能没有一个类似的,就要循环去下载。
第一步:如何设置自动变量
生成变量数据就可以通过后期的sql语句去将所有的值获取出来
请看[kettle]设置变量
第二步:自动变量匹配新的数据文件(改成新的循环取出每个数据文件)
主要是正则表达式,第二步需要自己好好研究一下正则表达式,我们做成循环就不需要匹配正则表达式了
跳过第二步
第三步:循环操作
在冰焰的帮助下调试出循环操作,顺便打下广告:
http://www.ukettle.org/forum.php?mod=viewthread&tid=79&fromuid=5
其实在本次方案最初的思路中没有想到要使用for循环,但是只认为是单个文件,或者几个文件,没想到测试中发现文件生成的时间不定,生成的个数不定。
其实在本次方案最初的思路中没有想到要使用for循环,但是只认为是单个文件,或者几个文件,没想到测试中发现文件生成的时间不定,生成的个数不定。