PDI - 读取 CSV 文件,如果缺少 field/data 则移至下一个文件

PDI - Read CSV Files, if missing field/data then move to the next file

我是 PDI 的新手,仍在了解它。我正在尝试创建将从一个文件夹中读取所有 csv 文件的转换,检查文件的数据是否正确,这意味着没有 missing/error/wrong 格式的行,然后将其存储在数据库中。

我尝试的是:

  1. 使用 Text File Input 使用 Apache Common VFS 访问 FTP 中的 CSV 文件。
  2. 使用 Filter Row
  3. 验证并设置条件以检查 CSV 中的数据(检查文件名、字段是否存在)
  4. 使用 Syncronize After Merge 输出到 PostgreSQL Table。我使用它是因为我还将 CSV 数据与来自另一个 table.
  5. 的数据连接起来

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

如果无法在 PDI 中实现,则可以读取所有数据并将其传递给下一步,但随后将在插入数据之前再次验证。

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

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

现在写作业可能是一项艰巨的任务,直到你写了 1/2 一打。所以你可以在一次转换中得到它。事实上,它是一种根据定义在整个输入数据上的指标来做出决定或进行计算的模式。

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

只是一个评论。在你的具体情况下,我会稍微改变流程,在第一个 filter 中测试接受的文件名,并删除 group by 和第二个 filter。但是我觉得如果你有标准模式会更有用。

但是,同样,出于各种原因,最好的做法是通过熟练的工作来完成它。