【问题标题】:Pentaho data integration, csv input, add filename columnPentaho 数据整合,csv 输入,添加文件名列
【发布时间】:2014-02-15 21:26:31
【问题描述】:

使用 Pentaho 数据集成,我有 csv 文件输入。我想从 csv 中读取所有列,添加一个带有文件名的列(如果我有 abcd.csv,我想要 abcd)并将其插入到数据库表中。

任何建议,我怎样才能在每一行添加一个文件名列?

【问题讨论】:

  • 你从哪里得到文件名?它是硬编码的吗?看起来 csv 输入步骤不允许您将文件名添加到字段列表中,这很奇怪,因为其他步骤可以,但根据您从哪里获取文件名,仍然很容易做到。

标签: pentaho


【解决方案1】:

我知道这听起来有点倒退,但您可能希望使用 Text File Input 步骤来解析 CSV 文件,而不是 CSV Input来自文本文件输入的选项子集,对分隔文件具有一些性能优势。

使用文本文件输入,您可以使用更多选项来读取文件。您可以将 Filetype 设置为 CSV 并在 Content 选项卡中选择您的分隔符,然后在 Fields 选项卡中列出您想要抓取的字段.使用此步骤将解决您的问题,因为在 Additional output fields 选项卡中,您可以在流中指定一个字段来放置您的文件名、扩展名、文件路径等。

您在使用 CSV 输入 时获得的优势是:

  • NIO:读取文件的本机系统调用意味着更快的性能,但目前仅限于本地文件。不支持 VFS。
  • 并行运行:如果您将此步骤配置为在多个副本或集群模式下运行,并启用并行运行,则每个副本将读取单个文件的单独块,允许您将文件读取分配到多个线程甚至集群转换中的多个从节点。
  • 延迟转换:如果您要从文件中读取许多字段并且其中许多字段不会被操作,而只是通过转换进入其他文本文件或数据库,则延迟转换会阻止 Kettle 执行对这些字段进行不必要的工作,例如将它们转换为字符串、日期或数字等对象。

如果您需要这些优势,那么您将不得不以另一种方式获取文件名,例如将其作为命名参数传递并使用“获取变量”步骤将其添加到流中。

参考资料:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2018-08-31
    • 1970-01-01
    相关资源
    最近更新 更多