如何使用pentaho kettle从s3 bucket加载多个文件

How to use pentaho kettle to load multiple files from s3 bucket

我想使用步骤 S3 CSV Input 从 s3 存储桶加载多个文件,然后转换并加载回 S3。但是我可以看到这个步骤一次只支持一个文件,我需要提供文件名,有没有办法通过只提供存储桶名称来一次加载所有文件,即 <s3-bucket-name>/*?

S3-CSV-InputCSV-Input 启发,不支持 multi-file-processing,例如 Text-File-Input。您必须先 retrieve the filenames ,这样您就可以像使用 CSV-Input.

一样遍历文件名列表

两个选项:

AWS CLI 方法

  1. 编写一个调用 AWS CLI 的简单 shell 脚本。把它放在你的道路上。称之为 s3.sh

    aws s3 ls s3://bucket.name/path | cut -c32-
    

    在 PDI 中:

  2. 生成行:Limit1,字段:Name:进程,Type:字符串,Values3.sh

  3. 执行进程:Process field:进程,Output Line Delimiter |

  4. 将字段拆分为行:Field to split:结果输出。 Delimiter | New field name: 文件名

  5. S3 CSV 输入:The filename field:文件名

S3 本地同步

使用s3fs

将S3目录挂载到本地目录

如果您在那个存储桶目录中有很多大文件,它就不会运行得这么快...如果您的 PDI 在亚马逊机器上运行可能没问题

然后使用标准文件读取工具

$ s3fs my-bucket.example.com/path/ ~/my-s3-files -o use_path_request_style -o url=https://s3.us-west-2.amazonaws.com