tests/fixtures/duckdb/ — BI-P014
sales.parquet and customers.csv are committed: small, binary-stable, and
portable across checkouts.
The Iceberg fixture is deliberately NOT committed. pyiceberg writes
ABSOLUTE paths into its metadata and Avro manifests, so a committed table only
resolves on the machine that built it — a fixture that silently fails
everywhere else is worse than no fixture. The recorded result of a real
iceberg_scan run is kept in evidence/bi-p014/duckdb-sandbox.json instead,
and tests/analytics/duckdb-provider.test.ts pins it.
To rebuild the Iceberg fixture locally:
python -m venv .venv && .venv/bin/pip install duckdb pyarrow 'pyiceberg[sql-sqlite]'
DUCKDB_PYTHON=.venv/bin/python pnpm vitest run tests/duckdb/duckdb-provider.live.test.ts
iceberg_scan is pointed at an EXACT metadata JSON file rather than a table
directory. That is not a workaround: DuckDB refuses to glob for the latest
version by default because globbing can read uncommitted data, and an exact
metadata file is precisely what "Iceberg snapshot" means in BI-P014.