Zum Inhalt springen

Iceberg-Funktionen

Die iceberg-Erweiterung stellt die folgenden Funktionen bereit:

Funktion Beschreibung
iceberg_scan(source) Liest eine Iceberg-Tabelle von einem Pfad.
iceberg_metadata(source) Gibt die Manifest-Einträge einer Iceberg-Tabelle zurück.
iceberg_snapshots(source) Gibt die Snapshots einer Iceberg-Tabelle zurück.
iceberg_table_properties(table) Gibt alle Eigenschaften der angegebenen Tabelle zurück.
iceberg_schema_properties(schema) Gibt alle Eigenschaften des angegebenen Schemas zurück.
set_iceberg_schema_properties(schema, properties) Setzt Eigenschaften auf dem angegebenen Schema.
remove_iceberg_schema_properties(schema, property_list) Entfernt Eigenschaften vom angegebenen Schema.
iceberg_to_ducklake(iceberg_catalog, ducklake_catalog) Kopiert die Iceberg-Metadaten eines Katalogs in einen DuckLake-Katalog.

Die Beispiele auf dieser Seite verwenden die Datei iceberg_data.zip; laden Sie sie herunter und entpacken Sie sie, um die Beispiele auszuführen.

iceberg_scan

Die Funktion iceberg_scan liest eine Iceberg-Tabelle von einem Pfad, ohne dass ein angehängter Katalog erforderlich ist:

SELECT count(*)
FROM iceberg_scan('data/iceberg/lineitem_iceberg', allow_moved_paths = true);
count_star()
51793

Der Pfad kann auch direkt auf eine Metadatendatei oder auf einen Objektspeicher wie S3 oder Azure Blob Storage zeigen. Die von dieser Funktion akzeptierten Parameter finden Sie auf der Seite Iceberg-Optionen.

iceberg_metadata

Um auf Iceberg-Metadaten zuzugreifen, können Sie die Funktion iceberg_metadata verwenden:

SELECT *
FROM iceberg_metadata('data/iceberg/lineitem_iceberg', allow_moved_paths = true);
manifest_path manifest_sequence_number manifest_content status content file_path file_format record_count
lineitem_iceberg/metadata/10eaca8a-1e1c-421e-ad6d-b232e5ee23d3-m1.avro 2 DATA ADDED EXISTING lineitem_iceberg/data/00041-414-f3c73457-bbd6-4b92-9c15-17b241171b16-00001.parquet PARQUET 51793
lineitem_iceberg/metadata/10eaca8a-1e1c-421e-ad6d-b232e5ee23d3-m0.avro 2 DATA DELETED EXISTING lineitem_iceberg/data/00000-411-0792dcfe-4e25-4ca3-8ada-175286069a47-00001.parquet PARQUET 60175

iceberg_snapshots

Um die Snapshots einer Iceberg-Tabelle anzuzeigen, verwenden Sie die Funktion iceberg_snapshots:

SELECT *
FROM iceberg_snapshots('data/iceberg/lineitem_iceberg');
sequence_number snapshot_id timestamp_ms manifest_list
1 3776207205136740581 2023-02-15 15:07:54.504 lineitem_iceberg/metadata/snap-3776207205136740581-1-cf3d0be5-cf70-453d-ad8f-48fdc412e608.avro
2 7635660646343998149 2023-02-15 15:08:14.73 lineitem_iceberg/metadata/snap-7635660646343998149-1-10eaca8a-1e1c-421e-ad6d-b232e5ee23d3.avro

iceberg_snapshots nimmt weder allow_moved_paths, snapshot_from_id noch snapshot_from_timestamp als Parameter entgegen.

Metadatenoperationen auf angehängten Katalogen

Die Funktionen iceberg_metadata und iceberg_snapshots können auch mit einem angehängten Iceberg-Katalog über einen vollständig qualifizierten Pfad verwendet werden, z. B.:

SELECT * FROM iceberg_metadata(my_datalake.default.t)
-- Or
SELECT * FROM iceberg_snapshots(my_datalake.default.t)

Diese Funktionalität ermöglicht dem Benutzer Time Travel.

-- Using a snapshot id
SELECT * FROM my_datalake.default.t AT (VERSION => ⟨SNAPSHOT_ID⟩)
-- Or using a timestamp
SELECT * FROM my_datalake.default.t AT (TIMESTAMP => TIMESTAMP '2025-09-22 12:32:43.217')

Funktionen für Tabelleneigenschaften

DuckDB stellt Funktionen bereit, um Iceberg-Tabelleneigenschaften anzuzeigen und zu ändern:

Funktion Beschreibung
iceberg_table_properties(table) Gibt alle Eigenschaften der angegebenen Tabelle zurück.

Sie können ALTER TABLE ... SET und ALTER TABLE ... RESET verwenden, um Tabelleneigenschaften zu ändern

-- View table properties
SELECT *
FROM iceberg_table_properties(iceberg_catalog.default.my_table);
-- Set table properties
ALTER TABLE iceberg_catalog.default.my_table SET (
'write.update.mode'='merge-on-read',
'write.delete.mode'='merge-on-read',
'format-version'=3
);
-- Remove table properties
ALTER TABLE iceberg_catalog.default.my_table RESET (
'write.update.mode',
'owner'
);

Funktionen für Schemaeigenschaften

Iceberg-Kataloge erlauben beliebige Schlüssel-Wert-Eigenschaften auf Schema- (Namespace-)Ebene. Diese Eigenschaften dienen typischerweise dazu, Besitz, Beschreibungen, Standard-Speicherorte oder andere Metadaten festzuhalten, die für jede Tabelle in einem Schema gelten.

Funktion Beschreibung
iceberg_schema_properties(schema) Gibt alle Eigenschaften des angegebenen Schemas zurück.
set_iceberg_schema_properties(schema, properties) Setzt Eigenschaften auf dem angegebenen Schema.
remove_iceberg_schema_properties(schema, property_list) Entfernt Eigenschaften vom angegebenen Schema.
-- Set schema properties
CALL set_iceberg_schema_properties(iceberg_catalog.default, {
'owner': 'analytics-team',
'description': 'Default analytics schema'
});
-- Read schema properties
SELECT * FROM iceberg_schema_properties(iceberg_catalog.default);
-- Remove schema properties
CALL remove_iceberg_schema_properties(
iceberg_catalog.default,
['description']
);

Schemaeigenschaften werden über den Iceberg REST Catalog geschrieben, sodass jede andere Iceberg-fähige Engine, die am selben Katalog hängt, die Änderungen sofort sieht. remove_iceberg_schema_properties gibt die Anzahl der verbleibenden Schemaeigenschaften zurück.

iceberg_to_ducklake

Die DuckDB-iceberg-Erweiterung stellt eine Funktion bereit, um eine reine Metadatenkopie der Iceberg-Metadaten nach DuckLake vorzunehmen. Damit können Benutzer Iceberg-Tabellen so abfragen, als wären sie DuckLake-Tabellen.

-- Given that we have an Iceberg catalog attached aliased to iceberg_datalake
ATTACH 'ducklake:my_ducklake.ducklake' AS my_ducklake;
CALL iceberg_to_ducklake('iceberg_datalake', 'my_ducklake');

Es ist außerdem möglich, eine Menge von Tabellen über den Parameter skip_tables zu überspringen.

CALL iceberg_to_ducklake('iceberg_datalake', 'my_ducklake', skip_tables := ['table_to_skip']);