Skip to main content
polars-io-tools logo, an igloo made of blocks in different blue shades

Custom parsing extensions for lazy polars

Build Status codecov License PyPI

Overview

polars-io-tools extends Polars lazy execution with custom I/O sources that push filters and column projections all the way down into the systems that hold your data — SQL databases, ClickHouse, Datadog, and Delta Lake — instead of loading everything and filtering in memory. It also adds lazy-friendly operations (joins, multi-source composition, time-series windows, caching, distributed execution) that keep predicate pushdown working where vanilla Polars would otherwise give up and materialize the whole frame.

Everything is exposed through the piot LazyFrame namespace and a handful of top-level scan_* / sink_* functions, so it composes naturally with the Polars API you already use.

Who is this for

Reach for polars-io-tools when you want Polars' lazy API over data that lives in an external store, and you care about not fetching rows or columns you will immediately throw away. It is most valuable for large, partitioned, or remote datasets where a filter on a date or key column should translate into a smaller query against the source. If your data already fits comfortably in memory or lives in local Parquet/CSV, plain Polars is the simpler choice.

Installation

pip install polars-io-tools

polars-io-tools requires Python 3.11 or newer. See the Installation guide for conda and source builds.

Quickstart

Importing the package registers the piot namespace on every Polars LazyFrame:

import polars as pl
import polars_io_tools  # registers the .piot namespace

left = pl.LazyFrame({"x": [1, 2, 3], "y": [4, 5, 6]})
right = pl.LazyFrame({"x": [-1, -2, 3], "z": [7, 8, 9]})

# An inner join where the keys present on the left are pushed down as a
# filter on the right frame *before* the join runs.
result = left.piot.filtered_join(right, on="x").collect()
print(result)
# shape: (1, 3)
# ┌─────┬─────┬─────┐
# │ x   ┆ y   ┆ z   │
# │ --- ┆ --- ┆ --- │
# │ i64 ┆ i64 ┆ i64 │
# ╞═════╪═════╪═════╡
# │ 3   ┆ 6   ┆ 9   │
# └─────┴─────┴─────┘

For a guided walkthrough, start with the Getting Started tutorial.

What's included

  • Lazy I/O sources with predicate & projection pushdown — scan_db (any ODBC database), scan_clickhouse, scan_datadog, scan_delta, and from_narwhals. Filters on the resulting LazyFrame are translated into the source's own query language (SQL WHERE, Datadog time ranges, Delta partition pruning) so only the matching rows and columns are fetched.
  • Lazy writers — sink_delta and sink_clickhouse write a LazyFrame directly to Delta Lake or ClickHouse, including streaming/chunked writes and transparent handling of types the target store cannot represent natively.
  • Pushdown-preserving query building — filtered_join, filtered_join_asof, join_between, pushdown_combine, concat_named, and ts_with_columns express joins, multi-source composition, and rolling/lookback time-series logic without blocking the filter pushdown that those operations normally defeat.
  • Caching — cache keeps an in-memory, column- and partition-level cache for iterative work; cache_parquet materializes date-partitioned Parquet on local disk or S3, fetching only the partitions a query needs.
  • Distributed execution — execute_on_ray splits a LazyFrame across an existing Ray cluster, one task per partition. Build partitions with by_time (calendar windows), by_value (discrete keys), by_range (numeric buckets), by_key (enumerated keys), or an explicit ReadPartition list. (For multi-stage distributed pipelines, Polars Cloud is the more strategic option.)
  • Ergonomics — iter_rows for memory-efficient row iteration, debug to inspect what Polars pushes into a source, and disable_optimizations to compare against plain Polars.

Documentation

Full documentation lives in the project wiki:

Contributing

Contributions are welcome. See the Contributing guide and Local Development Setup to get started.

License

polars-io-tools is licensed under the Apache 2.0 license.

Metadata

Release files for polars-io-tools 0.2.7

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

Source distribution (sdist)

Source distribution for polars-io-tools 0.2.7
File Size Uploaded Provenance Actions
polars_io_tools-0.2.7.tar.gz 482.9 kB Without provenance Details for polars_io_tools-0.2.7.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for polars-io-tools 0.2.7
File Actions
polars_io_tools-0.2.7-cp311-abi3-win_amd64.whl CPython 3.11 abi3 Windows x86-64 Details for polars_io_tools-0.2.7-cp311-abi3-win_amd64.whl
polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_x86_64.whl CPython 3.11 abi3 Linux glibc 2.28+ x86-64 Details for polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_x86_64.whl
polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_aarch64.whl CPython 3.11 abi3 Linux glibc 2.28+ ARM64 Details for polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_aarch64.whl
polars_io_tools-0.2.7-cp311-abi3-macosx_11_0_arm64.whl CPython 3.11 abi3 macOS 11.0+ ARM64 Details for polars_io_tools-0.2.7-cp311-abi3-macosx_11_0_arm64.whl

Total release size: 3.3 MB

Release files / polars_io_tools-0.2.7.tar.gz

Download URL polars_io_tools-0.2.7.tar.gz
Size 482.9 kB
Tags Source
SHA-256 checksum
How to use checksums
fd5e39c9a0b60ffb1b28aed2731aea3b837c71619252f845ae573c53b8131ac7
BLAKE2b-256 checksum
How to use checksums
f86e597bb50d99aee93da13b6eedc213fea5fb8ed10a8e8874000f7108dcd9d5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / polars_io_tools-0.2.7-cp311-abi3-win_amd64.whl

Download URL polars_io_tools-0.2.7-cp311-abi3-win_amd64.whl
Size 630.3 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
59bf66569eb67612ae394b114d6e9e9f3d550b2c577a071cba0daf99390605da
BLAKE2b-256 checksum
How to use checksums
6c23e2c9af1d4935d5dafd66cf15dd239cb96c55e164b8121b20f17a4aed0b30
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_x86_64.whl

Download URL polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_x86_64.whl
Size 741.7 kB
Tags CPython 3.11 Linux glibc 2.28+ x86-64 abi3
SHA-256 checksum
How to use checksums
d1a796dc43811fb18538dd157380885857691b0c01aca36e3aae2b1e59a7cba9
BLAKE2b-256 checksum
How to use checksums
def4264d0f50c4c4061c88bd5afaa6a190ccd1d3c0fd142534f6ba35d233e806
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_aarch64.whl

Download URL polars_io_tools-0.2.7-cp311-abi3-manylinux_2_28_aarch64.whl
Size 741.1 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
81665d92601ea865a251b8f58880e7183f886d5c9e8087eb20f3724e5538becd
BLAKE2b-256 checksum
How to use checksums
ae2e1f92b4a7c09c16b43c99fe3aadffcb0a45e9accc46bc6f660b43ebe48737
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Release files / polars_io_tools-0.2.7-cp311-abi3-macosx_11_0_arm64.whl

Download URL polars_io_tools-0.2.7-cp311-abi3-macosx_11_0_arm64.whl
Size 722.4 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ff507fe9492ee983fceff727f9e79a43df183786605881ed82361a5453958782
BLAKE2b-256 checksum
How to use checksums
b49be2a0a9e6036b70a2d5e5318ec974128d136b4ff1fd82a13e7c9fa7cd3817
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.15

Security for polars-io-tools 0.2.7

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.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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