Zum Inhalt springen

DuckDB-Datenbanken direkt lesen

DuckDB ermöglicht das direkte Lesen von DuckDB-Dateien über die Funktion read_duckdb:

read_duckdb(⟨'path_to_database'⟩, table_name ='table_to_read'⟩);

Diese Funktion entspricht den folgenden Schritten:

  • Anhängen der Datenbank mit einer schreibgeschützten Verbindung.
  • Abfragen der über das Argument table_name angegebenen Tabelle.
  • Schließen der Verbindung zur Datenbank.

Beispiele

Eine bestimmte Tabelle lesen

Um die Tabelle region aus dem TPC-H-Datensatz zu lesen, führen Sie aus:

SELECT r_regionkey, r_name
FROM read_duckdb('https://blobs.duckdb.org/data/tpch-sf10.db', table_name = 'region');
┌─────────────┬─────────────┐
│ r_regionkey │ r_name │
│ int32 │ varchar │
├─────────────┼─────────────┤
│ 0 │ AFRICA │
│ 1 │ AMERICA │
│ 2 │ ASIA │
│ 3 │ EUROPE │
│ 4 │ MIDDLE EAST │
└─────────────┴─────────────┘

Aus mehreren Datenbanken lesen

Sie können Globbing verwenden, um aus mehreren Datenbanken zu lesen. Um das zu veranschaulichen, legen wir zwei Tabellen an:

Terminal window
duckdb my-1.duckdb \
-c "CREATE TABLE numbers AS SELECT 42 AS x;" \
-c "CREATE TABLE letters AS SELECT 'm' AS a;"
duckdb my-2.duckdb \
-c "CREATE TABLE numbers AS SELECT 43 AS x;"

Anschließend können Sie in DuckDB Folgendes ausführen:

SELECT x FROM read_duckdb('my-*.duckdb', table_name = 'numbers');
┌───────┐
│ x │
│ int32 │
├───────┤
│ 42 │
│ 43 │
└───────┘

Aus Datenbanken mit einer einzigen Tabelle lesen

Wenn alle Datenbanken im Argument von read_duckdb nur eine Tabelle enthalten, ist das Argument table_name optional:

FROM read_duckdb('my-2.duckdb');
┌───────┐
│ x │
│ int32 │
├───────┤
│ 3 │
└───────┘

Wenn die Dateiendung .db oder .duckdb ist, können Sie den Aufruf von read_duckdb ebenfalls weglassen (analog zu read_csv und read_parquet):

FROM 'my-2.duckdb';

Einschränkungen

read_duckdb unterstützt derzeit nur das Lesen von Tabellen. Das Lesen von Views wird noch nicht unterstützt.