需要帮助配置NiFi的JsonRecordSetWriter和AvroSchemaRegistry

时间:2017-10-12 16:18:23

标签: type-conversion apache-nifi

我正在创建position: fixed; top: 0;以将NiFi WorkFlow转换为CSV,我需要帮助配置JSON' s ConvertRecords

正在发生的事情是JsonRecordSetWriter Controller Service被抛出

  

无法找到名称为' ccr' (我为架构选择的名称)。

使用SchemaNotFoundExceptionCSV文档中的标头推断出架构,"InferAvroSchema"配置为添加设置为{{1的"UpdateAttribute"的属性(根据其他方法和指导的指导)。

"schema.name"配置为使用Controller Service 'ccr',并在其中添加一个名为JsonRecordSetWriter的属性,并将此属性的值设置为"AvroSchemaRegistry"

我希望使用属性"ccr"中包含的派生架构,而不是必须提供avro架构的实际文本作为此添加属性的值。 "${inferred.avro.schema}"的{​​{1}}属性设置为值"inferred.avro.schema",这意味着推断的avro架构将被放入名为InferAvroSchema的属性中。

我真的需要帮助,因为我不能根据项目的要求将模式指定为文本。相反,我想使用推断的模式,以便我可以拥有由同一工作流处理的不同标头和数据内容的SchemaOutputDestination个文件。

您可以与我分享任何帮助和指导,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

如果您的架构访问策略的读者或编写器设置为“架构名称”,那么它必须从架构注册表中按名称检索架构,并且架构注册表将不知道有关$ {inferred.avro的任何内容。架构}在流文件上。

您可以将编写器设置为使用“架构文本”的架构访问策略,并在架构文本字段中放置$ {inferred.avro.schema},以便它可以从传入的流文件中动态获取架构文本。此时您没有根据自己的要求使用架构注册表。

一个不同的选项,可能适合您...如果您使用的是1.4.0版本,则可以取消InferAvroSchema。您可以将ConvertRecord与CsvReader一起使用,并将模式访问策略设置为“使用来自标头的字符串字段”,以便读者推断出架构,然后在JsonRecordSetWriter中将Schema Access Startegy设置为“从Reader继承”,以便它使用相同的架构由读者决定。早期版本中不存在继承功能,这就是为什么它依赖于1.4.0。