我正在尝试使用PDI(Kettle)将某个.CSV文件导入我的数据库。
通常情况下这很容易,因为您只需将CSV file input
步骤与Table output
步骤相关联即可。但问题是,我不知道要提前导入哪个文件,就像在PDI中执行作业/转换之前一样。
那是因为我的导入文件夹中有很多文件,它们的文件名格式都相同:KeyDate_Filename_YYYYMMDD.CSV
我们的想法是在给定的关键日期导入最新的YYYYMMDD文件。
我实现这一目标的理论方法是:
CSV file input
步骤(已完成)中使用所选文件名作为参数Table output
步骤(已完成)导入数据不幸的是,我对PDI相当陌生,对于如何实施大胆的部分,或者整个方法是否可行,我真的没有一个令人信服的想法。
有人可以想办法完成这项工作吗?感谢任何反馈
编辑:忘记提及我使用的是PDI 3.2.6。
在4.x.x中,我可以简单地使用用户定义的Java类来完成此任务:/
答案 0 :(得分:4)
有多种方法可以实现这一结果。这是一个:
获取文件名列出特定文件夹中与给定模式匹配的所有文件。由于${KeyDate}
已被定义为参数,因此模式可以是
$ {KEYDATE} [^ _ [0-9] 的.csv
(你可以使用更简单的正则表达式,但这个只能匹配那种格式的文件名;
${KeyDate}_[^_]*_([0-9]*)\.csv
。请记住勾选“为捕获组创建字段”复选框; Group by step的输出是一行,其最新文件名与您的模式匹配。
现在您将其传递给CSV文件输入,告诉它“接受上一步骤中的文件名”,并指定要使用的字段(默认为文件名)。