PDI-读取CSV文件,如果缺少字段/数据,则移至下一个文件

时间:2018-07-18 04:14:47

标签: kettle pentaho-data-integration pdi

我对PDI还是陌生的,但仍然对此有所了解。我正在尝试创建一个转换,该转换将从一个文件夹中读取所有csv文件,检查文件中的数据是否正确,这意味着没有格式缺失/错误/错误的行,然后将其存储在数据库中。

我尝试的是:

  1. 使用Text File Input通过Apache Common VFS访问FTP中的CSV文件。
  2. 使用Filter Row验证并建立条件以检查CSV中的数据(检查文件名,字段是否存在)
  3. 使用Syncronize After Merge输出到PostgreSQL表。我之所以使用它,是因为我还将CSV数据与另一个表中的数据结合在一起。

第二步的结果不是我想要的。目前,它会在读取所有csv之后进行检查,并将所有数据传递给下一步,但是我要在读取数据的同时进行检查,以便仅将正确的数据传递给下一步。我怎样才能做到这一点?有什么建议吗? (需要集思广益)

如果无法在PDI中实现,那么可以读取所有数据并将其传递到下一步,但是在插入数据之前将再次进行验证。

1 个答案:

答案 0 :(得分:0)

只有在完全读取并检查了所有数据后,才能验证文件。

执行此操作的好方法是协调几种转换(一种用于读取目录,一种用于检查文件是否有效,一种用于加载已验证文件的数据)。

现在写一份工作可能会使一项艰巨的任务接缝,直到您写了一打一打。因此,您可以进行一次转换。实际上,它是一种基于在整个输入数据上定义的指标进行决策或进行计算的模式。

  1. 获取文件列表。
  2. 读取它们,以跟踪文件名(在Additional output field标签中)。
  3. 像以前一样逐行进行检查。
  4. 进行摘要以拒绝至少有一个错误。
  5. 取回2的主流,如果文件名被拒绝,则对每一行进行查找。 (查找流是分组依据的结果)。
  6. 用拒绝的文件名过滤掉行。
  7. 将它们放在Postgres上(在用其他文件或表丰富数据之后)。

只是一句话。在您的特定情况下,我将稍作更改,测试第一个filter中可接受的文件名,并删除group by和第二个filter。但是我认为拥有标准模式对您会更有用。

但是,由于种种原因,良好的做法还是要熟练掌握。

enter image description here