kettle demo5 遍历目录下多文件,根据文件类型走不同方式导入到数据库(转载)

Posted on Posted in kettle示例

有时候从FTP上下载下来的文件有多个,并且文件格式有可能不同,这时候就要用到条件判断了,比如txt文件通过文本文件输入,excel文件通过excel输入,下面就来配置下这个操作

1、首先把文件准备好,txt文件是在25这个目录下,然后excel在25目录下的excel_folder子目录下,所以这里会有子目录的遍历

表清空,文件的数据尽量不要重复,否则会报主键重复错误

2、新建一个转换,先拖进来用到的控件,如下图

首先拖拽一个获取文件名的控件,然后后面用流程空间switch来判断,如果是文本文件,则走文本文件输入,如果是excel文件,则走excel输入,如果是目录,则走获取子目录名

这里获取子目录后不用再进行递归了,因为获取文件名这个操作里有个选项,是否包括子目录,他会把所有的文件和目录路径都遍历出来,所以当前目录下的文件和子目录下的文件走输入流程,子目录就打印下日志就好了 

3、获取文件名属性设置,下面的通配符没有写,导致后面报错了,在后面会提到

4、设置switch控件,这里测试的时候发现了报错,是因为下图Case值数据类型选择的是None,应该选择String,

5、设置文本文件输入,这里稍微有点变化了,因为这个地方接收的文件信息是仓switch来的,然后内容分隔符还是|,字段这一块就不能自动获取了,要手动设置下

6、表输出就不再设置了,跟前面基本一样,

7、excel输入属性设置,也是从上一步骤接收,然后工作表选项卡里sheet手动设置下,最后再手动设置下字段,后面的表输入就同上

8、获取子目录名控件,就勾选下目录名在字段中,然后选择目录字段为uri,

9、写日志,

10、到这里就结束了,然后执行下当前转换,发现报错了,说路径问题,

 

检查了下获取文件名属性哪里,发现只设置了目录,没有设置要遍历目录下那些格式的文件,没写正则表达式,咱们是要遍历txt、excel等文件,

而目录中现在只有三个格式:txt、子目录、excel三种,这三种咱们再switch里面已经全部判断了,所以咱们就还是写 .*\.*$ 就好了,就是遍历所有文件,包括目录

然后保存,再次执行下,执行成功了

但是发现日志没打印,这个暂时想不起来了,待会在调试下,