У меня есть существующая схема avro, которая содержит поле с вложенной картой карты типа записи (на данный момент назовем ее RecordA).Мне интересно, возможно ли добавить новый тип записи, RecordB, к этой вложенной карте карт при сохранении совместимости FULL_TRANSIENT?
Я думал, что до тех пор, пока внутренние карты по умолчанию переводятся в пустую карту, онивсе еще придерживается схемы, поэтому она обратно / вперед совместима.
Я пытался переопределить тип от map<map<RecordA>> maps
до map<map<union{RecordA, RecordB}>> maps
в файле .avdl
, но реестр схемы говорит мне, что это несовместимо.
Я также пытался по умолчанию установить каждую карту отдельно для пустой карты ({ }
) в сгенерированном файле .avsc
, но в реестре схем также указано, что это несовместимо.
Я делаюхочу признать, что я знаю map<map<..>>
- это плохая практика, но то, что было сделано, было сделано.
Зарегистрированная схема (оригинал) .avdl
:
record Outer {
map<map<RecordA>> maps;
}
record RecordA {
string value;
string updateTime;
}
Попыткас .avdl
:
record Outer {
map<map<union{RecordA, RecordB}>> maps = {};
}
record RecordA {
string value;
string updateTime;
}
record RecordB {
union{null, array<string>} values = null;
union{null, string} updateTime = null;
}
Попытка с .avsc
:
{
"name" : "maps",
"type" : {
"type" : "map",
"values" : {
"type" : "map",
"values" : [ {
"type" : "record",
"name" : "RecordA",
"fields" : [ {
"name" : "value",
"type" : "string"
}, {
"name" : "updateTime",
"type" : "string"
} ],
"default": { }
}, {
"type" : "record",
"name" : "RecordB",
"fields" : [ {
"name" : "value",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "values",
"type" : [ "null", "string" ],
"default" : null
}, {
"name" : "updateTime",
"type" : [ "null", "string" ],
"default" : null
} ],
"default": { }
} ]
}
},
"default" : { }
}
Конечная цель - получить map
из map
sк записи, у которой есть поле, которое может быть либо string
, либо array<string>
.Исходная схема была зарегистрирована в реестре схем, где поле имеет тип string
без union {}
с null
или значением по умолчанию, поэтому я считаю, что карта должна быть сопоставлена с объединением типов с любой версиейfield.
Каждая попытка возвращала следующее из API совместимости реестра схемы
{
"is_compatible": false
}
Любое понимание будет очень цениться!