Я пытаюсь прочитать файл JSON и создать таблицу на основе его схемы.
Я должен сделать это, хотя NiFi
, и я новичок в этом, поэтому яразбить проблему на следующие части
- Считать файл JSON, извлечь его схему
- После того, как будет извлечена правильная схема, используйте ее для создания оператора create
- Выполните оператор create
Для первого подхода я использую
GetFile > InferAvroSchema > EvaluateJsonPath > PutFile
Мой файл JSON выглядит следующим образом
{"data":[
{
"firstname":"John",
"lastname":"Snow",
"age":24
}
]}
вывод InferAvroSchema
(при отправке на PutFile
) равен
{
"type" : "record",
"name" : "MyRec",
"fields" : [ {
"name" : "data",
"type" : {
"type" : "array",
"items" : {
"type" : "record",
"name" : "data",
"fields" : [ {
"name" : "firstname",
"type" : "string",
"doc" : "Type inferred from '\"John\"'"
}, {
"name" : "lastname",
"type" : "string",
"doc" : "Type inferred from '\"Snow\"'"
}, {
"name" : "age",
"type" : "int",
"doc" : "Type inferred from '24'"
} ]
}
},
"doc" : "Type inferred from '[{\"firstname\":\"John\",\"lastname\":\"Snow\",\"age\":24}]'"
} ]
}
Итак, я пытаюсь прочитать схему в EvaluateJsonPath
как $.fields[0].type.items.fields
.
EvaluateJsonPath
Конфигурация процессора выглядит следующим образом: ![config](https://i.stack.imgur.com/DWLCW.png)
Когда я пытаюсь увидеть происхождение данных, я не вижу атрибута с именем colz
.Но если я отправлю его вывод в PutFile
, я получу это
[
{
"name":"firstname",
"type":"string",
"doc":"Type inferred from '\"John\"'"
},
{
"name":"lastname",
"type":"string",
"doc":"Type inferred from '\"Snow\"'"
},
{
"name":"age",
"type":"int",
"doc":"Type inferred from '24'"
}
]
, который является массивом.Теперь я надеялся, что смогу пройти через этот массив через некоторый скрипт и создать строку (для оператора create) с атрибутами name и type.
Может кто-нибудь подсказать мне, как я могу получить этот массив вскрипт (для зацикливания)?
Кроме того, мой подход в порядке или есть лучший способ достичь этого результата?
Я использую NiFi 1.8.0.Пожалуйста, дайте мне знать, если требуется дополнительная информация.