Определение полного имени Apache Avro Schema в Apache NiFi - PullRequest
0 голосов
/ 15 сентября 2018

Используя NiFi 1.7.1 (который использует Java Avro 1.8.1) и в AvroSchemaRegistry, я пытаюсь определить схему, которая имеет поля name и app.name на верхнем уровне. В соответствии с документацией Avro [1] я бы предположил, что я мог бы просто определить полное имя как "name": "app.name", но я столкнулся с ошибкой Illegal character in: app.name. Это правда, что часть имени полного имени не допускает точек, но в соответствии с документацией: «Если указанное имя содержит точку, то предполагается, что это полное имя ...»

Затем я попытался использовать поле пространства имен. Используя следующую схему:

{
  "type": "record",
  "name": "nameRecord",
  "fields": [
    {
      "type": [
        "string",
        "null"
      ],
      "name": "name"
    },
    {
      "type": [
        "string",
        "null"
      ],
      "namespace": "app",
      "name": "name"
    }
  ]
}

Я нажал эту ошибку: Duplicate field name in record nameRecord: name type:UNION pos:1 and name type:UNION pos:0

В конечном счете, я хотел бы иметь возможность определить схему для записи следующим образом (в JSON):

{
  "name": "Joe",
  "app.name": "NiFi"
}

[1] https://avro.apache.org/docs/1.8.1/spec.html#names

1 Ответ

0 голосов
/ 15 сентября 2018

Согласно документам , пространства имен поддерживаются только для записей, перечислений и фиксированных типов, а другие поля должны соответствовать "обычным" соглашениям об именах, для которых точка (.) Недопустимасимвол.

Однако, начиная с NiFi 1.5.0 (через NIFI-4612 ), вы можете указать схему в AvroSchemaRegistry и установить «Проверять имена полей»ложно.Это должно позволить вам обойти ограничение имени поля app.name.

...