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

Amazon s3 如何使用pentaho Ketter从s3 bucket加载多个文件,amazon-s3,pentaho,kettle,Amazon S3,Pentaho,Kettle,我想使用步骤s3csv输入从S3存储桶加载多个文件,然后转换并加载回S3。但是我可以看到这一步一次只支持一个文件,我需要提供文件名,有没有办法通过只提供bucket名称(即/*)一次加载所有文件?s3csv输入的灵感来自CSV输入,不支持像文本文件输入那样的多文件处理,例如您必须首先查看文件名列表,这样您就可以像处理CSV输入那样循环查看文件名列表S3 CSV输入的灵感来自CSV输入,例如,它不支持像文本文件输入那样的多文件处理。首先,您必须这样做,这样您就可以像使用CSV输入一样循环文件名列表

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

s3csv输入的灵感来自
CSV输入
,不支持像
文本文件输入
那样的多文件处理,例如您必须首先查看文件名列表,这样您就可以像处理
CSV输入那样循环查看文件名列表

S3 CSV输入的灵感来自
CSV输入
,例如,它不支持像
文本文件输入
那样的多文件处理。首先,您必须这样做,这样您就可以像使用
CSV输入一样循环文件名列表

两个选项:

AWS CLI方法

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

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

  • 生成行:
    限制
    1,字段:
    名称
    :进程,
    类型
    :字符串,
    s3.sh

  • 执行流程:
    流程字段
    :流程,
    输出行分隔符
    |

  • 将字段拆分为行:
    要拆分的字段
    :结果输出<代码>分隔符
  • |
    新字段名
    :文件名

  • S3 CSV输入:
    文件名字段
    :文件名

  • S3本地同步

    使用将S3目录装载到本地目录

    如果你的bucket目录中有很多大文件,它就不会运行得那么快……如果你的PDI在Amazon机器上运行的话,它可能没问题

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

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

    AWS CLI方法

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

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

  • 生成行:
    限制
    1,字段:
    名称
    :进程,
    类型
    :字符串,
    s3.sh

  • 执行流程:
    流程字段
    :流程,
    输出行分隔符
    |

  • 将字段拆分为行:
    要拆分的字段
    :结果输出<代码>分隔符
  • |
    新字段名
    :文件名

  • S3 CSV输入:
    文件名字段
    :文件名

  • S3本地同步

    使用将S3目录装载到本地目录

    如果你的bucket目录中有很多大文件,它就不会运行得那么快……如果你的PDI在Amazon机器上运行的话,它可能没问题

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

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

    我使用
    Execute Shell script
    获取bucket中所有文件的列表,如何将stdout输出传递到循环?将aws stdout重定向到临时文件,使用例如
    Text file Input
    提取文件名,通过
    Copy Rows to Result
    将文件名传递到循环转换(高级选项)“为每个输入行执行”)。定义一个参数文件名,并在转换的参数设置页面上对其进行初始化。不要忘记启用高级选项“将以前的结果复制到参数”“。玩得开心。我使用
    执行Shell脚本
    获取bucket中所有文件的列表,如何将stdout输出传递到循环?将aws stdout重定向到临时文件,使用例如
    文本文件输入
    提取文件名,通过
    复制行将文件名传递到结果
    到循环转换(高级选项)“为每个输入行执行”)。定义一个参数文件名,并在转换的参数设置页面上对其进行初始化。别忘了启用高级选项“将以前的结果复制到参数”。尽情享受吧。