2017-10-12 442 views
-1

我正在创建一个NiFi WorkFlow来将CSV转换为JSON,并且我需要帮助配置ConvertRecords的JsonRecordSetWriter控制器服务。发生什么事是一个SchemaNotFoundException异常被抛出,说“无法找到名称为'ccr'的架构(我为架构选择的名称)。架构是使用”InferAvroSchema“从CSV文件的头部推断的,”UpdateAttribute “被配置为添加一个名为”schema.name“的属性,该属性被设置为'ccr'(根据来自其他指导和指导的指导)。JsonRecordSetWriter被配置为使用控制器服务”AvroSchemaRegistry“以及添加的属性命名为“ccr”,此属性的值设置为“$ {inferred.avro.schema}”。我希望将属性“inferred.avro.schema”中包含的派生模式用于代替必须将avro模式的实际文本作为值添加到此添加的属性中InferAvroSchema的SchemaOutputDestination属性设置为值“flowfile-attribute”,意味着推断的avro模式将被放入名为“inferred.avro.schema”的属性中。真的需要帮助,我不能凭借项目的要求将模式指定为文本。相反,我想使用推断的模式,以便我可以使用同一个工作流处理不同标题和数据内容的CSV文件。任何帮助和指导,你可以与我分享,我将不胜感激。需要帮助配置NiFi的JsonRecordSetWriter和AvroSchemaRegistry

+0

你应该考虑格式化你的问题,以便它实际上是可读的。 – glennsl

回答

0

如果您的读者或作者的架构访问策略设置为“架构名称”,那么它必须从架构注册表中检索架构名称,架构注册表不会了解有关$ {inferred.avro .schema},它位于流文件中。

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

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

+0

Bende先生,它工作了!非常感谢您提供干净清爽的指导。对此,我真的非常感激! –