Relationale API auf Pandas
DuckDB bietet eine relationale API, mit der sich Abfrageoperationen verketten lassen. Diese werden verzögert ausgewertet, sodass DuckDB ihre Ausführung optimieren kann. Die Operatoren können auf Pandas-DataFrames, DuckDB-Tabellen oder Views wirken (die auf jedes zugrunde liegende Speicherformat zeigen können, das DuckDB lesen kann, z. B. CSV- oder Parquet-Dateien). Hier zeigen wir ein einfaches Beispiel: Lesen aus einem Pandas-DataFrame und Rückgabe eines DataFrames.
import duckdbimport pandas
# connect to an in-memory databasecon = duckdb.connect()
input_df = pandas.DataFrame.from_dict({'i': [1, 2, 3, 4], 'j': ["one", "two", "three", "four"]})
# create a DuckDB relation from a dataframerel = con.from_df(input_df)
# chain together relational operators (this is a lazy operation, so the operations are not yet executed)# equivalent to: SELECT i, j, i*2 AS two_i FROM input_df WHERE i >= 2 ORDER BY i DESC LIMIT 2transformed_rel = rel.filter('i >= 2').project('i, j, i*2 AS two_i').order('i DESC').limit(2)
# trigger execution by requesting .df() of the relation# .df() could have been added to the end of the chain above - it was separated for clarityoutput_df = transformed_rel.df()Relationale Operatoren können auch verwendet werden, um Zeilen zu gruppieren, zu aggregieren, eindeutige Wertekombinationen zu finden, zu joinen, zu vereinigen und mehr. Sie können Ergebnisse außerdem direkt in eine DuckDB-Tabelle einfügen oder in eine CSV-Datei schreiben.
Weitere Beispiele und die verfügbaren relationalen Methoden der Klasse DuckDBPyRelation finden Sie hier.