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