Hi Rob, Thanks for the advice, but in my case it's not useful. I am building a platform, not an application, so I have absolutely no control over the schema.
Thanks, Marcelo. On 25 April 2018 at 13:05, Rob Torop <[email protected]> wrote: > Hi, I the best way is to have the type have a field where its value is an > enum with only one choice. > > I don't remember the avro syntax perfectly, but it would be something like > this > > > > { "type": "enum", > "name": "NameType", > "symbols" : ["First"] > } > > Then you get the type by looking at the value of NameType. And for > validation, > > it will only validate if the valueof NameType is the the single allowed one. > > > It's a bit hacky, but works, and gets rid of the requirement to ahve horrible > nesting. > > > > On Wed, Apr 25, 2018 at 7:27 AM, Marcelo Valle <[email protected]> wrote: > >> 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 >> > > > > -- > Sent using my Mnemonic Memory Circuit > -- Marcelo Valle http://mvalle.com - @mvallebr
