首页 > 解决方案 > 在 NiFi FetchS3Object 中是否可以读取具有特定前缀的所有对象?

问题描述

我正在使用 NiFi 的 FetchS3Object 从 S3 存储桶中读取数据。在设置上,您可以指定要检索的对象的键。是否可以检索提供前缀而不是键的所有对象?

这是我的结构示例:

bucket-name
|--folder1
|----file1
|----file2
|--folder2
|----file1
|----file2

例如,我想读取folder1.Using S3 SDK 中的所有文件,我列出了所有folder1带有前缀的对象,然后获取具有特定前缀的任何单个对象。

我想到的一种可能的解决方案是开发一个自定义处理器来做我想做的事。

我不能使用 ListS3 处理器,因为当我从外部收到事件(流文件)时,我需要触发从 S3 的提取。列出来自 S3 的处理器等待事件

标签: amazon-s3apache-nifi

解决方案


为此,您需要在 NiFi 节点上安装 aws cli,然后您可以使用 ExecuteProcesss 脚本来运行如下命令:

aws s3api list-objects --bucket $BUCKET --prefix $PREFIX_IF_YOU_HAVE_IT --query "Contents[?contains(Key, '$VALUE_FROM_PREVIOS_PROCESSOR')]" | jq ".[0] .Key"

我建议使用前缀来减少扫描存储桶所需的时间。jq 在这里用于提取带有找到文件前缀的 json 值。您可能需要稍微更改命令,但它会给您一个方向。


推荐阅读