Мы использовали ValidateRecord для нашего процесса Nifi, чтобы проверить, все ли поля JSON содержат действительный тип данных. Мы использовали JSONReader для чтения, JSON writer для записи и AvroSchema для реестра схемы.
У меня есть следующая схема Avro и HTTP-запрос с телом JSON.
{
"name": "nifi",
"type": "record",
"fields": [
{
"name": "name",
"type": "string"
},
{
"name": "dateTime",
"type": "long"
},
{
"name": "sampleArray",
"type": {
"type": "array",
"items": {
"name": "arrayRecord",
"type": "record",
"fields": [
{
"name": "arrayName",
"type": {
"type": "arrayString",
"items": "string"
}
}
]
}
}
}
]
}
HTTP JSON Body:
{
"name": "testName",
"dateTime": 1565850981000,
"sampleArray": [
{
"arrayString": "test array string"
},
{
"arrayString": "second array string"
}
]
}
Проблема в том, что если поле массива отсутствует, оно не сделает FlowFile недействительным. Похоже, что он не проверяется правильно, так как каждое поле должно быть обязательным в соответствии с документацией avro.
Так что, если я добавлю следующее поле, оно станет действительным.
{
"name": "testName",
"dateTime": 1565850981000,
}