问题描述
我已经使用Executesql从数据库中检索了一些二进制文件(在这种情况下,是某些PDF),该结果在Avro FlowFile中返回结果。我不知道如何从Avro记录中获取二进制结果。
我尝试使用ConvertAvroToJSON,它给了我一个像这样的对象:
{"MYBLOB": {"bytes": "%PDF-1.4\n [...] " }}
但是,使用EvaluateJSONPath并抓住$.MYBLOB.bytes
会导致损坏,因为二进制字节已转换为UTF8。
ConvertRecord的所有记录编写器选项似乎都不适合二进制数据。
我能想到的最佳解决方案是在二进制文件离开数据库之前对其进行base64编码,然后我仅处理字符数据并可以在NiFi中对其进行解码。但这是额外的步骤,我不想这样做。
解决方法
在这种情况下,您可能需要脚本化的解决方案(作为一种解决方法),以获取字段并使用您自己的编码对其进行解码。无论如何,请随时提交Jira案例,不建议使用ConvertAvroToJSON,但我们应该在ExecuteSQLRecord / ConvertRecord中支持JsonRecordSetWriter的字符集(如果这对您也不起作用)。