F3.RowGroup (F3 v0.1.0)

Copy Markdown

One row group, with the column chunks the footer points at.

columns follows the column-metadata order for that row group. name is the matching schema field when the counts line up, and nil when they do not. Chunks are IOUnits. Each encunits entry is one encoding unit. This struct does not contain column bytes.

index is the row group index. num_rows is its row count. byte_offset and byte_size locate it in the file. columns follows the column-metadata order. A column name is the schema field when the counts line up, and nil when they do not.

Examples

iex> group = %F3.RowGroup{index: 0, num_rows: 3, byte_offset: 0, byte_size: 10}
iex> group.columns
[]

Summary

Types

chunk()

@type chunk() :: %{
  offset: non_neg_integer(),
  size: non_neg_integer(),
  num_rows: non_neg_integer(),
  dictionary: dictionary(),
  checksum: non_neg_integer() | nil,
  encunits: [encunit()]
}

column()

@type column() :: %{
  index: non_neg_integer(),
  name: String.t() | nil,
  chunks: [chunk()]
}

compression()

@type compression() :: :uncompressed | :zstd | :lz4 | non_neg_integer()

dictionary()

@type dictionary() ::
  :none | {:local, [non_neg_integer()]} | {:shared, non_neg_integer()}

encoding()

@type encoding() :: :cascade | :custom_wasm | non_neg_integer()

encunit()

@type encunit() :: %{
  size: non_neg_integer(),
  num_rows: non_neg_integer(),
  encoding: encoding(),
  compression: compression(),
  wasm_id: non_neg_integer() | nil
}

t()

@type t() :: %F3.RowGroup{
  byte_offset: non_neg_integer(),
  byte_size: non_neg_integer(),
  columns: [column()],
  index: non_neg_integer(),
  num_rows: non_neg_integer()
}