# Rerun Parquet

Ingest tabular Parquet files into Rerun chunk streams with...

- Repository: https://github.com/rerun-io/rerun (11675 stars)
- Category: Engineering
- License: Apache-2.0
- Last updated: 2026-11-01
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add rerun-io/rerun --skill rerun-parquet -g -a claude-code -y`
Codex: `npx skills add rerun-io/rerun --skill rerun-parquet -g -a codex -y`
Cursor: `npx skills add rerun-io/rerun --skill rerun-parquet -g -a cursor -y`
Gemini CLI: `npx skills add rerun-io/rerun --skill rerun-parquet -g -a gemini-cli -y`

## Description

Ingest tabular Parquet files into Rerun chunk streams with rerun.experimental.ParquetReader. Read when converting trajectory or sensor tables (LeRobot-style parquet, exported logs) into entities and components, column grouping, timeline/index columns, static columns, and lenses (DeriveLens) that assemble the typed components (Transform3D, Scalars) from the reader's grouped struct/scalar output. Builds on rerun-chunk-processing and rerun-data-model.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Rerun parquet ingestion

`ParquetReader` is a **pure reader**: it maps a flat table onto the Rerun
model by turning raw columns into grouped, time-indexed chunks of struct and
scalar components. Column-name prefixes become entities, grouped columns
become a single struct component, designated columns become timelines. The
reader does **not** assemble archetypes anymore, mapping struct fields into
typed Rerun components (Transform3D, Scalars, Points3D) is done with lenses on
the reader's `.stream()`. The whole reader job is configuration; fill in the
`rerun-data-model` mapping table first, then express it through `stream()`.
Stream mechanics after `.stream()` are in `rerun-chunk-processing`.

**The whole table is configuration, not code.** If you find yourself building
`Chunk.from_columns` from a parquet, or munging it in pandas first, stop, `ParquetReader` plus a lens almost certainly expresses it. Anything the reader
cannot express (per-row entity routing, derived values, unit conversion)
belongs in lenses downstream, not in pre-pandas munging; keep the pipeline
columnar.

## The API

```python
from rerun.chunk import DeriveLens, IndexColumn
from rerun.experimental import ParquetReader

reader = ParquetReader(table_path)  # a lightweight handle over the file
stream = reader.stream(
    entity_path_prefix="/world",  # prepended to every entity path
    column_grouping="prefix",  # "prefix" | "individual" | "explicit_prefixes"
    delimiter="_",  # split for column_grouping="prefix"
    prefixes=None,  # required for "explicit_prefixes"
    use_structs=True,  # pack grouped columns into one struct component
    static_columns=["robot_type"],  # constant-per-file values, logged static
    index_columns=[IndexColumn.timestamp("timestamp", input_unit="us"), IndexColumn.sequence("frame_index")],
)
```

The rest: https://github.com/rerun-io/rerun/blob/HEAD/skills/rerun-parquet/SKILL.md
