Python Polars 1.43.1 was published on July 27, 2026. This stable patch release concentrates on query correctness, led by fixes for a panic in self joins over Delta or Iceberg scans and undefined behavior in first/last_non_null on an empty chunk. For production data pipelines, those failure fixes matter more than the small expression optimization also included in the release.
The full release notes and downloads are on the GitHub release page.
Delta and Iceberg scan failures ¶
Polars now fixes a panic triggered by a self join of scan_delta or scan_iceberg. A pipeline can construct both join inputs from the same lake table scan. Version 1.43.1 removes that documented panic path.
The release also shares the null_count_dtype helper between the Delta and Iceberg implementations. That change fixes a SchemaError in their schema handling. It is a narrow correction rather than a new table format feature, but it removes another failure mode close to ingestion and schema discovery.
These fixes deserve direct regression coverage in jobs that join snapshots from the same Delta or Iceberg source. The release notes do not declare a migration step or a configuration change for either correction.
There is no new table scan API to adopt. The useful acceptance test is an existing production query shape with two lazy scans from the same table, plus the schema cases that previously raised SchemaError. A basic read from only one side does not exercise the corrected self join path.
SQL null semantics and join correctness ¶
Empty chunks get a separate safety correction. Polars removes undefined behavior from first/last_non_null when no values are present. This matters at partition boundaries and after filters that can leave an execution chunk empty.
SQL NOT IN now handles its interaction with NULL values and joins according to three valued logic. This is a result correctness issue. Filters that combine NOT IN, nullable data, and joins should be rerun against expected row counts after the upgrade, especially when absence and false are handled differently downstream.
Aggregate behavior is also corrected. SQL SUM and CORR now return NULL for inputs where every value is null, and the SQL surface adds TOTAL. Returning a null result preserves the distinction between missing observations and an actual numeric value. That distinction can affect quality checks, materialized tables, and exports to systems that coerce nulls.
These are semantic changes even though 1.43.1 is a patch release. Regression fixtures should assert the exact output rows and aggregate values for nullable inputs. Checking only that the query completes will miss the reason for these fixes.
Streaming plans, slices, and cloud sinks ¶
Several fixes target execution plans that could silently produce the wrong rows. The streaming engine no longer applies common subexpression elimination to a height expression that is not tied to a column. This is optimizer correctness, not a new streaming feature.
Slice handling receives two separate corrections. A slice is no longer dropped when a plan contains multiple unions, and the in memory engine now applies the correct slice to a join that maintains order. These cases warrant focused comparison tests because a successful query could previously return the wrong range rather than fail.
Cloud execution gains callback sinks, which makes that sink mechanism available beyond local execution. The release note is brief and does not specify new settings or delivery guarantees. Test existing callback code in the cloud environment before moving a production sink, rather than assuming its behavior is identical to local execution.
Where to get it ¶
- Python Polars 1.43.1 release
- pola-rs/polars repository
- Tag:
py-1.43.1