首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >比较PDI中的文件名

比较PDI中的文件名
EN

Stack Overflow用户
提问于 2015-05-21 07:18:50
回答 1查看 564关注 0票数 1

我试图使用PDI (Kettle)将一个特定的.CSV文件导入我的数据库。

通常情况下,这很容易,因为您只需将CSV file input步骤与Table output步骤连接起来就可以了。但是,问题是我不知道要提前导入哪个文件,就像在执行PDI中的作业/转换之前一样。

这是因为导入文件夹中有许多文件,它们的文件名都是相同的:KeyDate_Filename_YYYYMMDD.CSV

这个想法是使用为给定密钥日期导入的最新YYYYMMDD文件。

我的理论方法是:

  • 将给定的键日期作为参数在PDI中可用(已经完成)
  • 读取存储在导入文件夹中的所有文件的名称
  • 过滤器指定给定密钥日期的文件名
  • 比较其余文件的YYYYMMDD并选择最新的
  • CSV file input步骤中使用选定的文件名作为参数(已经完成)
  • 通过Table output步骤导入数据(已经完成)

不幸的是,我对PDI相当陌生,对于如何实现大胆的部分,或者该方法作为一个整体是否可行,我并没有一个令人信服的想法。

有人能想出办法来完成这件事吗?感谢你的反馈

编辑:忘记提到我正在使用PDI 3.2.6。

在4.x.x中,我可以简单地使用用户定义的Java类来完成这个任务:/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-21 09:44:43

要取得这一结果,有多种方法。这里有一个:

  1. Get文件名列出了特定文件夹中与给定模式匹配的所有文件。由于${KeyDate}已经定义为参数,所以模式可以是 ${KeyDate}[^]_0-9.csv

(您可以使用更简单的正则表达式,但这个正则表达式只匹配该格式的文件名;

  1. 通过正则表达式计算,您可以得到日期:${KeyDate}_[^_]*_([0-9]*)\.csv。记住勾选“为捕获组创建字段”复选框;
  2. 按新创建的日期字段订购行。
  3. Group (没有键字段)并接受文件名的第一个值(如果asc顺序)或最后一个值(如果是desc顺序)。

Group的输出是一个单独的行,其最近的文件名与您的模式相匹配。

现在将它传递给CSV文件输入,告诉它“接受上一步的文件名”,并指定要使用的字段(默认值是文件名)。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30367020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档