Polars

Statusverified
Readsyes
Writesyes
Iceberg v3not tested
Geometry, geographynot tested
Last verified2026-09-28 (Polars 1.44 + PyIceberg 0.12)

Connect

# pip install polars "pyiceberg[pyarrow]"; the catalog object is the PyIceberg one above
import polars as pl
table = catalog.load_table("demo.cities")
df = pl.scan_iceberg(table, reader_override="pyiceberg").filter(pl.col("country") == "DE").collect()
pl.DataFrame({"id": [8], "name": ["Hamburg"], "country": ["DE"], "pop_k": [1900]}).write_iceberg(table, mode="append")

Polars reads and writes through a PyIceberg table. reader_override="pyiceberg" matters: Polars' own reader does not use the per-table credentials the catalog vends and falls back to the cloud instance-metadata address (169.254.169.254), which fails outside a cloud VM. Passing the vended credentials yourself also works (storage_options from table.io.properties: s3.access-key-id, s3.secret-access-key, s3.session-token, endpoint https://s3.lakehousebox.com, region us-east-1, path-style), but they expire within the hour; the override asks the catalog each time. Verified 2026-09-28: a filtered scan, an append, and the read-only recipe's write refused (ACCESS_DENIED).

Using Polars with LakehouseBox and found something missing, wrong or out of date here? Write to hello@lakehousebox.com: what you ran, the version, and what happened. Product names and logos are trademarks of their owners; their use here does not imply endorsement.