h5col#
h5col stores column-oriented tables natively in HDF5 files. A table is an ordinary
HDF5 group. Each scalar column in it is an ordinary rank-1 HDF5 dataset. A
variable-length list column is a small group of such HDF5 datasets. On top
of that deliberately simple layout, the H5Col convention specifies the things a
real tabular workload needs: a committed row count, per-column chunking and
compression, fixed-length strings that never truncate silently, boolean and
categorical columns, precise missing-value semantics, variable-length list
columns, and persistent search indexes that accelerate row selection.
The convention is an HDF5 Enhancement Proposal: HEP001 — H5Col: Column-Oriented
Tabular Data in HDF5. This package,
h5col, built on h5py, is its first
experimental implementation. It supports writing and reading the convention’s tables, and
adds a small pyarrow-style query API on top:
import h5py
from h5col import ColumnSpec, FixedString, Table, field
with h5py.File("observations.h5", "w") as f:
table = Table.create(
f.create_group("obs"),
[
ColumnSpec(name="station", dtype=FixedString(nbytes=8)),
ColumnSpec(name="t_air", dtype="float32", units="degC"),
],
title="Surface air temperature",
)
table.append({"station": ["KBOS", "KJFK", "KLGA"], "t_air": [21.5, 24.0, 23.1]})
print(table.select(field("t_air") > 22.0).read(["station"]))
A file written this way needs nothing beyond HDF5 to be read. Every column is a
plain dataset that h5py, h5dump, HDFView, or any other HDF5 tool can open,
whether or not this package is installed; the convention’s extra meaning is
carried in attributes that convention-aware readers understand and other
readers simply ignore.
Where to start#
If you already use Parquet or Arrow and are wondering what this adds, start with Why H5Col?, then work through the quickstart.
The user guide explains one concept per chapter, from the on-disk data model to search indexes.
Queries documents row selection: the predicate API, the complete syntax, and how indexes accelerate evaluation.
The examples are rendered Jupyter notebooks, including a real-data walkthrough with New York City taxi trips.
The API reference documents every public name in the package.
Adherence of this package to the H5Col (HEP001) specification is documented in the conformance page.
Funding
The software initial development was funded by the U.S. Department of Energy, Office of Science, Office of Fusion Energy Sciences, under Award Number DE-SC0024442.