Amazon s3 在NIFI PUTS3对象处理器中访问流文件内容

Amazon s3 在NIFI PUTS3对象处理器中访问流文件内容,amazon-s3,apache-nifi,Amazon S3,Apache Nifi,我是NIFI新手,希望将数据从卡夫卡推送到S3存储桶。我使用的是PutS3Object处理器,如果我将Bucket值硬编码为mphdf/orderEvent,我可以将数据推送到S3,但我希望根据FlowFile内容中的一个字段(Json)指定Bucket。因此,如果Json内容是this{“menu”:{“type”:“file”,“value”:“file”}},那么Bucket属性的值可以是mphdf/$.menu.type?我尝试过这样做,并得到下面的错误。我想知道是否有办法使用PutS3

我是NIFI新手,希望将数据从卡夫卡推送到S3存储桶。我使用的是
PutS3Object
处理器,如果我将Bucket值硬编码为mphdf/orderEvent,我可以将数据推送到S3,但我希望根据FlowFile内容中的一个字段(Json)指定Bucket。因此,如果Json内容是this
{“menu”:{“type”:“file”,“value”:“file”}}
,那么Bucket属性的值可以是
mphdf/$.menu.type
?我尝试过这样做,并得到下面的错误。我想知道是否有办法使用PutS3Object处理器访问FlowFile内容,并使Bucket名称可配置,还是我必须构建自己的处理器

ERROR [Timer-Driven Process Thread-10]
o.a.nifi.processors.aws.s3.PutS3Object
com.amazonaws.services.s3.model.AmazonS3Exception: The XML you
provided was not well-formed or did not validate against our
published schema (Service: Amazon S3; Status Code: 400; Error Code:
MalformedXML; Request ID: 77DF07828CBA0E5F)

我相信您要做的是使用
EvaluateJSONPath
处理器,它根据JSON内容计算任意JSONPath表达式,并将结果提取到flowfile属性。然后,您可以在
PutS3Object
配置中使用NiFi表达式语言引用flowfile属性(请参阅引用
${filename}
的第一个属性对象键)。这样,您将计算
$.menu.type
并将其存储到
EvaluateJSONPath
处理器中的属性menuType,然后在
PutS3Object
中,您将拥有Bucketbe
mphdf/${menuType}

你可能得玩一玩,但我认为这应该行得通