Skip to main content
oleander’s Polars integration lets you run Polars workloads directly against your Iceberg lake tables - no infrastructure to provision. Workloads execute in an isolated sandbox, or across multiple workers in distributed mode. A DataFrame script always selects Polars: the query router sends anything passed as script here, whatever engine you asked for. SQL only reaches Polars when you request it explicitly.

Modes

SQL query

Run a Polars SQL expression against one or more registered lake tables. This is the fastest way to explore data without writing Python. Lake query Lake query dark

Python script

Write a Python script using the Polars DataFrame API. oleander injects the runtime, auth, and catalog - your script only needs to assign result. The following are available in scope without any imports: Organization environment variables are available through os.environ. Your script must assign its output to result - a Polars LazyFrame or DataFrame. oleander handles .collect() and distributed dispatch; do not call them in your script. If your script builds a table name at runtime, such as scan(params["table"]), also declare it in tables so the query router can size the sandbox.

Runtime

Sandboxes run Polars 2.1. In Polars SQL, a decimal literal such as 1.1 is a Decimal rather than a Float64. When a run writes to an existing table, columns are cast to the table’s types. Polars SQL does not support INSERT, UPDATE, or some window frames. On engine: auto, the query router sends those queries to another engine.

Distributed execution

Distributed mode runs your workload across multiple workers instead of a single sandbox, for datasets that exceed sandbox memory. A distributed run always writes to a destination table and requires the Pro++ plan. Distributed runs are billed as distributed compute from cluster startup until the run finishes. See pricing.

Saving results

Results can be written back to a table in your Iceberg catalog. Choose overwrite to replace the table or append to add rows to an existing one.

Lineage

Every Polars run, SQL or script, captures lineage, including column lineage, through openlineage-polars. Inputs are the tables the run read and the output is the table it wrote, in the same graph as the other engines.

CLI & API

Polars workloads can also be triggered programmatically: