# `F3.RowGroup`

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
    []

# `chunk`

```elixir
@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`

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

# `compression`

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

# `dictionary`

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

# `encoding`

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

# `encunit`

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

# `t`

```elixir
@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()
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
