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
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 duckdbimport 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 COLUMNSWeitere Informationen zu Polars finden Sie in der Python-API-Referenz.