diff --git a/format/Schema.fbs b/format/Schema.fbs index a7e802b9dcb..186f8e362bd 100644 --- a/format/Schema.fbs +++ b/format/Schema.fbs @@ -44,6 +44,35 @@ table FixedSizeList { listSize: int; } +/// A Map is a logical nested type that is represented as +/// +/// List> +/// +/// In this layout, the keys and values are each respectively contiguous. We do +/// not constrain the key and value types, so the application is responsible +/// for ensuring that the keys are hashable and unique. Whether the keys are sorted +/// may be set in the metadata for this field +/// +/// In a Field with Map type, the Field has a child Struct field, which then +/// has two children: key type and the second the value type. The names of the +/// child fields may be respectively "entry", "key", and "value", but this is +/// not enforced +/// +/// Map +/// - child[0] entry: Struct +/// - child[0] key: K +/// - child[1] value: V +/// +/// Neither the "entry" field nor the "key" field may be nullable. +/// +/// The metadata is structured so that Arrow systems without special handling +/// for Map can make Map an alias for List. The "layout" attribute for the Map +/// field must have the same contents as a List. +table Map { + /// Set to true if the keys within each value are sorted + keysSorted: bool; +} + enum UnionMode:short { Sparse, Dense } /// A union is a complex type with children in Field @@ -170,7 +199,8 @@ union Type { Struct_, Union, FixedSizeBinary, - FixedSizeList + FixedSizeList, + Map } /// ----------------------------------------------------------------------