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.5

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.5
File Size Uploaded
polars_io_tools-0.2.5.tar.gz 425.8 kB Details

Built distributions (wheels)

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

Total release size: 3.0 MB

Release files / polars_io_tools-0.2.5.tar.gz

Download URL polars_io_tools-0.2.5.tar.gz
Size 425.8 kB
Tags Source
SHA-256 checksum
How to use checksums
cfe382f3dbff222f168d790d9e6f8aa4e0734366e8b10e82632eaffc4733b1fe
BLAKE2b-256 checksum
How to use checksums
78d92e8adf81329d2a9119768f0b8d699899c74fed426fd093ac6e5ddad0b877
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

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

Download URL polars_io_tools-0.2.5-cp311-abi3-win_amd64.whl
Size 569.7 kB
Tags CPython 3.11 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
b99ccd004b5fa51c002984c6bf91c04a6418d5926a4dcc6e025518095832e58e
BLAKE2b-256 checksum
How to use checksums
307fa70050c18e589abdd0bb4e066d614b58e8fbf494bff55b49a0a6f1ba80c8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

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

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

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

Download URL polars_io_tools-0.2.5-cp311-abi3-manylinux_2_28_aarch64.whl
Size 680.7 kB
Tags CPython 3.11 Linux glibc 2.28+ ARM64 abi3
SHA-256 checksum
How to use checksums
68a2ca7376396f2b438c99a5a8896e66ff1b5fa3543a9a3bd518e8545222f763
BLAKE2b-256 checksum
How to use checksums
24401b1e8397cf4d1cb1a2e711b8b37227b14483ac2d28c02737be7bb3dd0878
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

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

Download URL polars_io_tools-0.2.5-cp311-abi3-macosx_11_0_arm64.whl
Size 661.8 kB
Tags CPython 3.11 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
c526576131fc8c9a6a0e092adfdb8aec65606cf591b7bf0b1b56728f6e209679
BLAKE2b-256 checksum
How to use checksums
1855a410503efa216508db8e802de2df7717cb803b1f202cc58d9bdf519d7b39
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.14

Release history Release notifications | RSS feed

This release

0.2.5 This release

5 release files

0.2.4

4 release files

0.2.3

5 release files

0.2.2

5 release files

0.2.1

5 release files

0.2.0

5 release files

0.1.2

4 release files

0.1.1

4 release files

0.1.0

4 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