Я пишу программу на python, используя официальную библиотеку avro для python версии 1.8.2.
Это простая схема, чтобы показать мою проблему:
{
"type": "record",
"namespace": "com.example",
"name": "NameUnion",
"fields": [
{
"name": "name",
"type": [
{
"type": "record",
"namespace": "com.example",
"name": "FullName",
"fields": [
{
"name": "first",
"type": "string"
},
{
"name": "last",
"type": "string"
}
]
},
{
"type": "record",
"namespace": "com.example",
"name": "ConcatenatedFullName",
"fields": [
{
"name": "entireName",
"type": "string"
}
]
}
]
}
]
}
Возможные значения для этой схемы: {"name": {"first": "Hakuna", "last": "Matata"}}
и {"name": {"entireName": "Hakuna Matata"}}
.
Однако, это дает предел неопределенности, так как не всегда avro сможет обнаружить правильную схему, указанную в объединении. В этом случае любой элемент данных будет соответствовать 1 и только 1 действительной схеме, но может быть случай, когда в объединении будет более 1 схемы.
Интересно, можно ли было бы использовать элемент данных, подобный {"name": {"FullName": {"first": "Hakuna", "last": "Matata"}}}
, где конкретное имя схемы объединения указано в элементе данных.
Возможно ли это? Как это сделать?