Skip to main content

pqbench

PyO3 bindings for pqbench. pip install builds a native wheel; a separate pqbench binary is not required. Two surfaces, one wheel:

  • pqbench.native — the commands: one function per library path, with the same arguments. Every name is the Rust function of the same path.
  • pqbench — the ergonomic surface over them: the client handles every command takes (Config, Dialect, Lake, Layer, Workspace) and walk, the whole-metastore walk composed once.

Install

pip install pqbench

The wheel carries every storage backend (delta-s3, iceberg-s3), so s3:// reads and Delta/Iceberg tables work out of the box. A storage read authenticates with the credentials= argument (a Credentials record) or, for bytemass, with env on its request — or with the process environment.

From a checkout:

pip install maturin
maturin develop --manifest-path python/Cargo.toml

The commands

Each command is the library function of the same path, under pqbench.native, and takes the handles and the resource's name like the Rust signature: the name is the AIP resource name a parent record carries, so a record feeds the next command as it is. credentials.get takes a table's name and returns its lease, the Credentials record a storage read takes, and a record is its model's class: record["uri"], record.uri and record.asdict() agree.

They are the walk's own pipeline — metastore, catalog, schema, table, credentials, partition, file, bytemass — and they stop at bytemass: the commands downstream of a byte-mass stream (viz, diff, profile, experiment), the standalone codec benchmarks (lz, compression) and skill are separate tools, and are not bound.

import asyncio
import pqbench
import pqbench.native

async def main():
    workspace = pqbench.Workspace(pqbench.Config("https://…", token="…"))
    lake = pqbench.Lake(workspace)

    # The walk, one function per resource. The I/O verbs are awaitable.
    await pqbench.native.metastore.get.get(workspace)
    await pqbench.native.catalog.get.get(workspace, "catalogs/dbx_samples")
    await pqbench.native.catalog.list.list(workspace)
    await pqbench.native.schema.list.list(workspace, "catalogs/dbx_samples")
    refs = await pqbench.native.table.list.list(
        workspace, "catalogs/dbx_samples/schemas/nyctaxi"
    )
    await pqbench.native.credentials.check.check(
        workspace, "catalogs/dbx_samples/schemas/nyctaxi/tables/trips"
    )
    # `credentials.get.get` is name -> lease: the lease is what a storage read
    # takes, from the table's name alone.
    credentials = await pqbench.native.credentials.get.get(workspace, refs[0]["name"])
    table = await pqbench.native.table.get.get(
        workspace,
        lake,
        refs[0]["name"], refs[0].get("uri"), credentials,
    )

    # `partition.list.list` and `file.list.list` stream (async iterators); the
    # single-value verbs are awaitable.
    async for partition in pqbench.native.partition.list.list(
        lake, table["name"], table["uri"], table.get("credentials"), 86_400_000
    ):
        async for file in pqbench.native.file.list.list(
            lake, partition["uri"], partition.get("credentials"), partition["commit_versions"]
        ):
            # The pipeline stops here: `bytemass` measures the file's bytes.
            rows = await pqbench.native.bytemass.bytemass(
                lake, pqbench.native.BytemassRequest(inputs=[file["uri"]])
            )
            print(len(rows), file["uri"])

asyncio.run(main())

The walk

walk is the one composition rather than a binding: it spans the catalog levels and descends every table the principal may read outside compute, with the tables in flight together (bounded by concurrency, 32 by default), and yields each table file.

async for file in pqbench.walk(workspace):
    print(file["uri"])

catalog= descends one catalog instead of every readable one. A table that cannot be read is skipped (logged at debug), so a mixed metastore still walks; records stream, so the walk holds no more than a bounded queue of them.

The Unity Catalog API limits requests per endpoint and per workspace, so its calls are paced at requests_per_second — 15, one bucket per endpoint, and 0 turns pacing off. The storage reads are not paced: object storage has no such limit and retries its own. Anything skipped is counted in a warning when the walk ends, so a rate limit shows up as a count rather than as silently missing files.

bytemass is the last command: it reads what file.list.list yields — a path or URI per file — and returns one MassRow per column chunk.

rows = await pqbench.native.bytemass.bytemass(
    lake, pqbench.native.BytemassRequest(inputs=["s3://…/part-00000.parquet"])
)

samples/walk.py is a runnable walk over the whole metastore: it calls walk, spans every catalog and schema, descends the one catalog the principal may read outside compute, and prints each table file.

PQB_ENDPOINT=https://<workspace>.cloud.databricks.com PQB_TOKEN=<bearer> \
  AWS_REGION=us-east-2 python samples/walk.py

Configuration

Config(endpoint, token=None, dialect=Dialect.UNITY) carries the endpoint, the bearer, and the dialect (UNITY or ICEBERG); Layer(endpoint=None, token=None, dialect=None).resolve() combines configuration layers into a Config.

credentials is a Credentials record — what credentials.get returns — or the mapping of the same fields; a read given none falls back to the process environment. A request's env is the library's BTreeMap<String, String>, passed straight through. A BytemassRequest names inputs (paths or glob masks), env (the AWS_* options a remote read uses) and indexes (load the parquet page indexes too, one extra range per file).

Publish to PyPI

.github/workflows/publish-pypi.yml builds manylinux, macOS, and Windows wheels with maturin and uploads them with PyPI trusted publishing — no token is stored. It has its own dispatch, after the matching tag is released: gh workflow run publish-pypi.yml, or Publish Python package from the Actions tab. Publishing is separate because PyPI names the workflow file that may upload, and its trusted publisher does not accept a job defined in a workflow that another workflow calls.

Its version is the workspace's: scripts/version.sh sync writes [workspace.package] version from Cargo.toml into python/Cargo.toml before maturin reads it, and make check-version fails when the two disagree — python/ is its own crate and cannot inherit it.

Before the first upload:

  1. On PyPI, add a pending publisher for this repository: owner pqbench, project pqbench, workflow publish-pypi.yml, environment pypi.
  2. In the GitHub repository settings, create an environment named pypi.
  3. Run the Publish Python package workflow.

Metadata

Release files for pqbench 0.0.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pqbench 0.0.2
File Size Uploaded
pqbench-0.0.2.tar.gz 190.3 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for pqbench 0.0.2
File
pqbench-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.9 abi3 Linux glibc 2.17+ x86-64 Details
pqbench-0.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 abi3 Linux glibc 2.17+ ARM64 Details
pqbench-0.0.2-cp39-abi3-macosx_13_0_x86_64.whl CPython 3.9 abi3 macOS 13.0+ x86-64 Details
pqbench-0.0.2-cp39-abi3-macosx_11_0_arm64.whl CPython 3.9 abi3 macOS 11.0+ ARM64 Details

Total release size: 70.0 MB

Release files / pqbench-0.0.2.tar.gz

Download URL pqbench-0.0.2.tar.gz
Size 190.3 kB
Tags Source
SHA-256 checksum
How to use checksums
e0c0e2b7bbdd5c0f235da03dde4bf6da782f8eeecf3bd9cc79891fc5e827496c
BLAKE2b-256 checksum
How to use checksums
969db660adc2027cecb922916bed2689bef5444a31aba69ec626b69571c4c6dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / pqbench-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL pqbench-0.0.2-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 18.4 MB
Tags CPython 3.9 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
d6f604ba7a76040ec010b3284b2ebd5a84aaf178ecda81d3eccfdd68ad9b6d5a
BLAKE2b-256 checksum
How to use checksums
8fea46f1cf1751108baaabad5f435216682d9a74ce2b70e9c3d1d03654ba76da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / pqbench-0.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL pqbench-0.0.2-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 18.6 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
2620efe4b0fd6be21dcd3e69b3f390421bd136cbc3277b66ff80f8234a12cb0e
BLAKE2b-256 checksum
How to use checksums
fad4891814061e544e580072af99aa92e741b8be095ea56d89ab3eb0fd8ce406
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / pqbench-0.0.2-cp39-abi3-macosx_13_0_x86_64.whl

Download URL pqbench-0.0.2-cp39-abi3-macosx_13_0_x86_64.whl
Size 16.7 MB
Tags CPython 3.9 abi3 macOS 13.0+ x86-64
SHA-256 checksum
How to use checksums
a6098ba14b4bb5c30ad47d147c095d2440b09aa2188a06ca77e62157670b36ab
BLAKE2b-256 checksum
How to use checksums
4b4bd9aa6eb78b7a81ee85a7f3f276fb4fb36d8058c44818ddbdd65f09c5914b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release files / pqbench-0.0.2-cp39-abi3-macosx_11_0_arm64.whl

Download URL pqbench-0.0.2-cp39-abi3-macosx_11_0_arm64.whl
Size 16.1 MB
Tags CPython 3.9 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
15ed725d262d59b1bc4b8ca826cbcc1beecbe8b007a2da0dcaa35918c0c06d8a
BLAKE2b-256 checksum
How to use checksums
46466fa6d2c2858c6d4007dff213c3a1fbf045082456188b790a6b6fa1f5936e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 18, 2026.

Transparency log

Release history Release notifications | RSS feed

0.0.3

5 release files

This release

0.0.2 This release

5 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page