Zum Inhalt springen

Integration mit Polars

Polars ist eine DataFrames-Bibliothek, die in Rust geschrieben ist und Bindings für Python und Node.js bereitstellt. Als Speichermodell verwendet sie das spaltenorientierte Format von Apache Arrow. DuckDB kann Polars-DataFrames lesen und Abfrageergebnisse in Polars-DataFrames umwandeln. Intern geschieht das über die effiziente Apache-Arrow-Integration. Für die Integration muss die Bibliothek pyarrow installiert sein.

Installation

Terminal window
pip install -U duckdb 'polars[pyarrow]'

Von Polars nach DuckDB

DuckDB kann Polars-DataFrames nativ abfragen, indem es den Namen der Polars-DataFrames im aktuellen Gültigkeitsbereich verwendet.

import duckdb
import polars as pl
df = pl.DataFrame(
{
"A": [1, 2, 3, 4, 5],
"fruits": ["banana", "banana", "apple", "apple", "banana"],
"B": [5, 4, 3, 2, 1],
"cars": ["beetle", "audi", "beetle", "beetle", "beetle"],
}
)
duckdb.sql("SELECT * FROM df").show()

Von DuckDB nach Polars

DuckDB kann Ergebnisse mit der Ergebnisumwandlungsmethode .pl() als Polars-DataFrames ausgeben.

df = duckdb.sql("""
SELECT 1 AS id, 'banana' AS fruit
UNION ALL
SELECT 2, 'apple'
UNION ALL
SELECT 3, 'mango'"""
).pl()
print(df)
shape: (3, 2)
┌─────┬────────┐
│ id ┆ fruit │
│ --- ┆ --- │
│ i32 ┆ str │
╞═════╪════════╡
│ 1 ┆ banana │
│ 2 ┆ apple │
│ 3 ┆ mango │
└─────┴────────┘

Der optionale Parameter lazy erlaubt die Rückgabe von Polars-LazyFrames.

df = duckdb.sql("""
SELECT 1 AS id, 'banana' AS fruit
UNION ALL
SELECT 2, 'apple'
UNION ALL
SELECT 3, 'mango'"""
).pl(lazy=True)
print(df)
naive plan: (run LazyFrame.explain(optimized=True) to see the optimized plan)
PYTHON SCAN []
PROJECT */2 COLUMNS

Weitere Informationen zu Polars finden Sie in der Python-API-Referenz.