Nifi Validate Запись вложенного набора JSON действительна для отсутствующего поля массива - PullRequest
0 голосов
/ 21 октября 2019

Мы использовали 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,
}
...