DType Format#

FlatBuffer Definition#

// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright the Vortex contributors

enum PType: uint8 {
    U8,
    U16,
    U32,
    U64,
    I8,
    I16,
    I32,
    I64,
    F16,
    F32,
    F64,
}

table Null {}

table Bool {
    nullable: bool;
}

table Primitive {
    ptype: PType;
    nullable: bool;
}

table Decimal {
    precision: uint8;
    scale: int8;
    nullable: bool;
}

table Utf8 {
    nullable: bool;
}

table Binary {
    nullable: bool;
}

table Struct_ {
    names: [string];
    dtypes: [DType];
    nullable: bool;
}

table List {
    element_type: DType;
    nullable: bool;
}

table FixedSizeList {
    element_type: DType;
    size: uint32;
    nullable: bool;
}

table Extension {
    id: string;
    storage_dtype: DType;
    metadata: [ubyte];
}

union Type {
    Null = 1,
    Bool = 2,
    Primitive = 3,
    Decimal = 4,
    Utf8 = 5,
    Binary = 6,
    Struct_ = 7,
    List = 8,
    Extension = 9,
    FixedSizeList = 10, // This is after `Extension` for backwards compatibility.
}

table DType {
  type: Type;
}

root_type DType;

Protobuf Definition#

// SPDX-License-Identifier: Apache-2.0
// SPDX-FileCopyrightText: Copyright the Vortex contributors

syntax = "proto3";

package vortex.dtype;

option java_package = "dev.vortex.proto";
option java_outer_classname = "DTypeProtos";

enum PType {
  U8 = 0;
  U16 = 1;
  U32 = 2;
  U64 = 3;
  I8 = 4;
  I16 = 5;
  I32 = 6;
  I64 = 7;
  F16 = 8;
  F32 = 9;
  F64 = 10;
}

message Null {}

message Bool {
  bool nullable = 1;
}

message Primitive {
  PType type = 1;
  bool nullable = 2;
}

message Decimal {
  uint32 precision = 1;
  int32 scale = 2;
  bool nullable = 3;
}

message Utf8 {
  bool nullable = 1;
}

message Binary {
  bool nullable = 1;
}

message Struct {
  repeated string names = 1;
  repeated DType dtypes = 2;
  bool nullable = 3;
}

message List {
  DType element_type = 1;
  bool nullable = 2;
}

message FixedSizeList {
  DType element_type = 1;
  uint32 size = 2;
  bool nullable = 3;
}

message Extension {
  string id = 1;
  DType storage_dtype = 2;
  optional bytes metadata = 3;
}

message DType {
  oneof dtype_type {
    Null null = 1;
    Bool bool = 2;
    Primitive primitive = 3;
    Decimal decimal = 4;
    Utf8 utf8 = 5;
    Binary binary = 6;
    Struct struct = 7;
    List list = 8;
    Extension extension = 9;
    FixedSizeList fixed_size_list = 10; // This is after `Extension` for backwards compatibility.
  }
}

message Field {
  oneof field_type {
    string name = 1;
  }
}

message FieldPath {
  repeated Field path = 1;
}