Hello All,

I would like to start moving forward with Map type support and begin
working on implementations. I believe we just need to define the specifics
of the metadata representation before getting started. Previously, there
was a thread [1] that discussed adding Map as a logical type and I'll try
to summarize where we are currently.

Map has been added as a logical type and defined in the Flatbuffer schema
format with 1 field "keysSorted" which indicates if the child keys vector
has been presorted. A Map is a nested type that is represented as
List<entry: Struct<key: K, value: V>>.

I think these are the 2 main issues of the metadata that need to be agreed
upon:

- Same memory layout as List<entry: Struct<key: K, value: V>>. This is so
implementations lacking Map can alias as repeated struct values.

- `Struct` and `K` fields are constrained to be non-nullable, other fields
can be nullable


Here is a sample JSON metadata representation:

{
"name" : "MapName",
"nullable" : true|false,
"type" : {
    "name" : "map",
    "keysSorted" : true|false
},
"children" : [{
    "name" : "entry",
    "nullable" : false,
    "type" : {
        "name" : "struct"
    },
    "children" : [{
        "name" : "key",
        "nullable" : false,
        "type" : {
            "name" : K
        },
        "children" : []
    },{
        "name" : "value",
        "nullable" : true|false,
        "type" : {
            "name" : V
        },
        "children" : []
    }]
}]


Any concerns or objections to the above?  Hopefully that covers what needs
to be discussed, please correct me if I missed something. Thanks!

Bryan


[1]:
https://lists.apache.org/thread.html/d61f21924159718fb31d27f5c85d58d393a88708f76dff510c8da322@%3Cdev.arrow.apache.org%3E

Reply via email to