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.xx 中,我可以简单地使用用户定义的 Java 类来完成这项工作:/

4

1 回答 1

4

有多种方法可以实现这一结果。这是一个:

在此处输入图像描述

  1. 获取文件名列出特定文件夹中与给定模式匹配的所有文件。由于${KeyDate}已经定义为参数,模式可以是

    ${KeyDate} [^ ] _[0-9] .csv

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

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

Group by step 的输出是单行,其中包含与您的模式匹配的最新文件名。

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

于 2015-05-21T09:44:43.180 回答