如何使用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-Input
受 CSV-Input
启发,不支持 multi-file-processing,例如 Text-File-Input
。您必须先 retrieve the filenames ,这样您就可以像使用 CSV-Input
.
一样遍历文件名列表
两个选项:
AWS CLI 方法
编写一个调用 AWS CLI 的简单 shell 脚本。把它放在你的道路上。称之为 s3.sh
aws s3 ls s3://bucket.name/path | cut -c32-
在 PDI 中:
生成行:Limit
1,字段:Name
:进程,Type
:字符串,Value
s3.sh
执行进程:Process field
:进程,Output Line Delimiter
|
将字段拆分为行:Field to split
:结果输出。 Delimiter
| New field name
: 文件名
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
我想使用步骤 S3 CSV Input
从 s3 存储桶加载多个文件,然后转换并加载回 S3。但是我可以看到这个步骤一次只支持一个文件,我需要提供文件名,有没有办法通过只提供存储桶名称来一次加载所有文件,即 <s3-bucket-name>/*
?
S3-CSV-Input
受 CSV-Input
启发,不支持 multi-file-processing,例如 Text-File-Input
。您必须先 retrieve the filenames ,这样您就可以像使用 CSV-Input
.
两个选项:
AWS CLI 方法
编写一个调用 AWS CLI 的简单 shell 脚本。把它放在你的道路上。称之为
s3.sh
aws s3 ls s3://bucket.name/path | cut -c32-
在 PDI 中:
生成行:
Limit
1,字段:Name
:进程,Type
:字符串,Value
s3.sh执行进程:
Process field
:进程,Output Line Delimiter
|将字段拆分为行:
Field to split
:结果输出。Delimiter
|New field name
: 文件名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