You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by Jon Bender <jo...@gmail.com> on 2012/06/05 06:00:43 UTC
Duplicate field names inside nested records
Hello,
At the moment I'm trying to use the following Avro schema:
http://pastebin.com/SXKZ0KAR
When I try to parse the schema, it's throwing an error because of the
duplicate record name "configData" (Error: can't redefine: "configData")
contained in multiple different records. As you can see these names are
nested inside of other fields/records, so I wasn't expecting there to be a
collision of the record names defined at different levels.
I am constructing this overall Avro schema from a number of smaller schemas
("FOO", "BAR" being examples) which are map types and need to be nullable,
which is why I tried to define them as union ["null", {type: map }].
Is there any way to preserve the original names of the records (eg.
configData) in this particular design, or do I need to redefine the record
names of each individual object to avoid collisions?
Using Avro 1.5.4 at the moment.
Cheers,
Jon
Re: Duplicate field names inside nested records
Posted by Doug Cutting <cu...@apache.org>.
On 06/04/2012 09:00 PM, Jon Bender wrote:
> At the moment I'm trying to use the following Avro schema:
> http://pastebin.com/SXKZ0KAR
>
> When I try to parse the schema, it's throwing an error because of the
> duplicate record name "configData" (Error: can't redefine: "configData")
> contained in multiple different records. As you can see these names are
> nested inside of other fields/records, so I wasn't expecting there to be
> a collision of the record names defined at different levels.
Record names are not defined in a nested, lexical scope, but rather
dynamically during the parsing. Once a name is defined it persists
through the rest of parsing process. This permits one to define a
record the first time it's used, then refer to it by name in subsequent
uses.
> I am constructing this overall Avro schema from a number of smaller
> schemas ("FOO", "BAR" being examples) which are map types and need to be
> nullable, which is why I tried to define them as union ["null", {type:
> map }].
>
> Is there any way to preserve the original names of the records (eg.
> configData) in this particular design, or do I need to redefine the
> record names of each individual object to avoid collisions?
It's not entirely clear to me what you're trying to model, but Avro
won't let you use the same record namespace+name for two different
things within a single schema. Sorry!
Doug