Try the protocol/idl stuff; docs are at:

https://avro.apache.org/docs/1.8.2/idl.html

The idl stuff is much nicer about syntax, does the merging (only
declares the enums where they are used, doesn't drop them in a global)
and will create schemas for each compound avro type.

Sam's suggestion works too, but the organization is a hassle.   The
idl is a much nicer syntax.




On Fri, Jul 7, 2017 at 2:29 PM, Sam Groth <sgr...@yahoo-inc.com> wrote:
> At least in Java, my understanding is that non-primitive type names are
> global to that schema file so you could use approach 1, but instead of
> defining all types at the root union, define them at the first subschema use
> and then refer to their type by name in the rest of the use cases.
> Disclaimer: It's been a long time since I tried this so I could be wrong.
>
>
> Hope this helps.
> Sam
>
>
> On Friday, July 7, 2017 11:22 AM, Shannon Carey <sca...@expedia.com> wrote:
>
>
> I'm trying to see if I can use a single Avro schema file but still have
> multiple record & enum types re-used throughout different places in the
> schema.
>
> Based on these answers
> https://stackoverflow.com/questions/21539113/can-i-split-an-apache-avro-schema-across-multiple-files
> and
> https://stackoverflow.com/questions/29280635/avro-schema-definition-nesting-types
> the only two ways are:
>
> 1. Use a union as the root type, and define all your re-used types as
> members of the union. Unfortunately, this approach is not ideal as it allows
> any of those types to be serialized as the root object regardless of which
> types you want to be the root.
>
> Or, 2. Define a Protocol instead of a Schema, putting all your types into
> "types". This appears to have the same problem as #1.
>
> Is that right? Is there any other way? I'd rather only have to reference one
> schema file instead of multiple.
>
> Thanks,
> Shannon
>
>

Reply via email to