Я хотел бы применить псевдонимы к развитому полю enum в моей схеме avro для обратной совместимости. Но после добавления псевдонимов в мое перечисление, реестр схемы все еще отклонял мою схему как несовместимую. Может кто-нибудь, пожалуйста, помогите увидеть, где я делаю неправильно? Я использую Avro 1.9.0
Исходная схема avro:
{
"namespace": "com.example.test",
"type": "record",
"name": "Employee",
"doc" : "testing schema",
"fields": [
{
"name": "EmployeeId",
"type": "string",
"doc" : "Employee's Id"
},
{
"name": "Type",
"type": {
"type": "enum",
"name": "EmployeeType",
"symbols": ["OFFICER", "MANAGER", "DIRECTOR"]
}
}
]
}
Что я сделал, чтобы развить схему, так это изменить ее пространство имен. Хотя содержимое схемы остается неизменным, перечисление, встроенное в схему Employee, неявно создается с новым пространством имен com.example.test.newnamespace
. И это изменение привело к тому, что моя развитая схема стала обратно несовместимой.
Я попытался добавить псевдоним к развитому перечислению с новым пространством имен:
{
"namespace": "com.example.test.newnamespace",
"type": "record",
"name": "Employee",
"doc" : "testing schema",
"fields": [
{
"name": "EmployeeId",
"type": "string",
"doc" : "Employee's Id"
},
{
"name": "Type",
"type": {
"type": "enum",
"name": "EmployeeType",
"aliases": ["com.example.test.EmployeeType"],
"symbols": ["OFFICER", "MANAGER", "DIRECTOR"]
}
}
]
}
Но когда я проверяю развитую схему с API моего реестра схем вернул реестр is-compatible = false
.
Если я явно установлю полное квалифицированное имя моего перечисления таким же, как старое пространство имен "name": "com.example.test.EmployeeType"
, развитая схема совместима.
Где я делаю не так? Я вижу, что спецификация Avro заявляет, что поля enum поддерживают псевдонимы:
Enums Enums используют имя типа "enum" и поддерживают следующие атрибуты:
- name: a JSON строка, содержащая имя перечисления (обязательно).
- пространство имен, строка JSON, которая определяет имя;
- псевдонимы: массив строк JSON с альтернативными именами для этого перечисления (необязательно).
... ...