2017-10-12 438 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先生,它工作了!非常感謝您提供乾淨清爽的指導。對此,我真的非常感激! –