[
https://issues.apache.org/jira/browse/AVRO-680?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14051742#comment-14051742
]
Doug Cutting commented on AVRO-680:
-----------------------------------
Any automated support for this should probably be restricted to ReflectData.
Generic and Specific generally conform closely to what's defined in the schema,
while Reflect's goal is to adapt to what's been defined in Java. In this case,
the goal is to support a Java feature (non-string Map keys) that's not directly
supported by Avro schemas, so such support belongs in entirely in Reflect.
ReflectData#isArray would thus return true for maps with non-string keys, and
#isMap would return false. ReflectData#createSchema would return the schema,
and ReflectDatumReader#readArray and ReflectDatumWriter#writeArray would handle
reading & writing, respectively.
The key/value pair schemas should perhaps only have a numeric suffix when
there's more than one, and might be named something like Pair, so that in most
cases folks would see schemas like,
{code}
{"type":"array",
"elements":{"type":"record","name":"org.apache.avro.reflect.Pair","fields":[{""name":"key",...},{""name":"value",...}]}}
{code}
> Allow for non-string keys
> -------------------------
>
> Key: AVRO-680
> URL: https://issues.apache.org/jira/browse/AVRO-680
> Project: Avro
> Issue Type: Improvement
> Affects Versions: 1.7.6, 1.7.7
> Reporter: Jeremy Hanna
> Attachments: non_string_map_keys.zip
>
>
> Based on an email thread back in April, Doug Cutting proposed a possible
> solution for having non-string keys:
> Stu Hood wrote:
> > I can understand the reasoning behind AVRO-9, but now I need to look for an
> > alternative to a 'map' that will allow me to store an association of bytes
> > keys to values.
> A map of Foo has the same binary format as an array of records, each
> with a string field and a Foo field. So an application can use an array
> schema similar to this to represent map-like structures with, e.g.,
> non-string keys.
> Perhaps we could establish standard properties that indicate that a
> given array of records should be represented in a map-like way if
> possible? E.g.,:
> {"type": "array", "isMap": true, "items": {"type":"record", ...}}
> Doug
--
This message was sent by Atlassian JIRA
(v6.2#6252)