I am writing a python program using the official avro library for python,
version 1.8.2.
This is a simple schema to show my problem:
{
"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"
}
]
}
]
}
]
}
Possible datums for this schema would be `{"name": {"first": "Hakuna",
"last": "Matata"}}` and `{"name": {"entireName": "Hakuna Matata"}}`.
However, this gives margin to ambiguity, as not always avro will be able to
detect the right schema specified in the union. In this case, either datum
will correspond to 1 and only 1 valid schema, but there might be a case
where more than 1 schema in the union would be valid.
I wonder whether it would be possible to use a datum like `{"name":
{"FullName": {"first": "Hakuna", "last": "Matata"}}}`, where the specific
union schema name is specified in the datum.
Is it possible? How to do it?
--
Marcelo Valle
http://mvalle.com - @mvallebr