Was ist Apache Iceberg in Azure Databricks?

Apache Iceberg ist ein Open-Source-Tabellenformat für Analyseworkloads, das Features wie Schemaentwicklung, Zeitreise und ausgeblendete Partitionierung unterstützt. Wie Delta Lake erstellt Iceberg eine Abstraktionsebene, die ACID-Transaktionen auf Ihren Daten im Objektspeicher zulässt.

Azure Databricks unterstützt Iceberg-Tabellen, die das Apache-Parkettdateiformat und die Versionen 1, 2 und 3 der Iceberg-Spezifikation verwenden. Iceberg behält die Atomarität und Konsistenz bei, indem neue Metadatendateien für jede Tabellenänderung erstellt werden. Alle Iceberg-Tabellen in Azure Databricks folgen der Spezifikation des offenen Iceberg-Tabellenformats. Siehe die Iceberg-Tabellenspezifikation.

Ein Iceberg-Katalog ist die Oberste Ebene der Iceberg-Tabellenarchitektur, die beim Laden einer Tabelle die aktuellen Metadaten zurückgibt. Der Iceberg-Katalog verarbeitet Vorgänge wie das Erstellen, Ablegen und Umbenennen von Tabellen.

Azure Databricks unterstützt Iceberg-Tabellen, die von:

Requirements

Um Apache Iceberg verwaltete oder fremde Tabellen zu verwenden, müssen Sie die folgenden Anforderungen erfüllen:

  • Verwenden Sie einen Arbeitsbereich mit aktiviertem Unity-Katalog.
  • Verwenden Sie Databricks Runtime 16.4 LTS oder höher.

Erstellen von Iceberg-Tabellen im Unity-Katalog

Iceberg-Tabellen, die Sie im Unity-Katalog erstellen, sind verwaltete Iceberg-Tabellen. Sie können diese Tabellen erstellen mit:

Verwaltete Iceberg-Tabellen sind vollständig in Azure Databricks Plattformfeatures integriert:

  • Unity Catalog verwaltet Lebenszyklusaufgaben wie den Ablauf von Snapshots und die Dateikompaktierung für diese Tabellen.
  • Das Flüssige Clustering verbessert die Abfrageleistung.
  • Durch die predictive Optimierung werden Vorgänge automatisiert, um die Speicherkosten zu reduzieren und die Abfragegeschwindigkeit zu verbessern.
  • materialisierte Ansichten unterstützen die inkrementelle Aktualisierung, um die Ergebnisse bei Änderungen der Quelldaten auf dem neuesten Stand zu halten.
  • Streamingtabellen unterstützen das inkrementelle Laden von Daten aus Kafka und Cloudobjektspeicher mit Databricks SQL.

Databricks empfiehlt die Verwendung der Iceberg-Clientversion 1.9.2 und höher, um den Unity-Katalog zu lesen und zu schreiben.

Lesen von Iceberg-Tabellen, die von anderen Katalogen verwaltet werden

Eine fremde Iceberg-Tabelle ist eine Iceberg-Tabelle, die von einem Katalog außerhalb des Unity-Katalogs verwaltet wird. Der externe Katalog speichert die aktuellen Metadaten der Tabelle. Azure Databricks verwendet Lakehouse Federation, um Metadaten abzurufen und die Tabelle aus dem Objektspeicher zu lesen.

Externe Iceberg-Tabellen sind in Azure Databricks nur lesbar und verfügen über begrenzte Plattformunterstützung.

Zugreifen auf Iceberg-Tabellen mit externen Systemen

Sie können mit der Iceberg REST-Katalog-API auf alle Iceberg-Tabellen im Unity-Katalog zugreifen. Diese offene API unterstützt Lese- und Schreibvorgänge von externen Iceberg-Engines in verschiedenen Sprachen und Plattformen. Siehe Zugriff auf Azure Databricks-Tabellen von Apache Iceberg-Clients.

Der REST-Katalog unterstützt Credential Vending, das temporäre Credentials an externe Engines für den Zugriff auf den zugrunde liegenden Speicher liefert. Weitere Informationen finden Sie unter Unity Catalog credential vending für external system access.

Warnung

Der Verkauf von Anmeldeinformationen wird in Arbeitsbereichen, die den Standardspeicher verwenden, nicht unterstützt. Informationen finden Sie unter Einschränkungen.

Verwaltete Iceberg-Tabellen klonen

Sie können eine vollständige, unabhängige Kopie einer verwalteten Iceberg-Tabelle erstellen.DEEP CLONE Ein Deep Clone kopiert die Datendateien und Metadaten der Tabelle in eine neue verwaltete Iceberg-Tabelle im Unity-Katalog. Siehe Klonen einer verwalteten Iceberg-Tabelle.

Erstellen einer materialisierten Ansicht, die mit externen Iceberg-Lesern kompatibel ist

Important

Verwaltete Iceberg-Materialansichten befinden sich in der öffentlichen Vorschau. Um dieses Feature zu aktivieren, wenden Sie sich an Ihr Databricks-Kontoteam.

Sie können eine materialisierte Ansicht erstellen, die mit externen Iceberg-Lesern kompatibel ist. Um eine zu erstellen, verwenden Sie USING ICEBERG in der CREATE MATERIALIZED VIEW-Anweisung. Die vollständige Syntax finden Sie unter CREATE MATERIALIZED VIEW (Pipelines). Die vollständigen Anforderungen finden Sie unter Externen Datenzugriff auf Streaming-Tabellen und materialisierte Ansichten aktivieren.

CREATE MATERIALIZED VIEW <mv_name>
USING ICEBERG
AS
SELECT * FROM samples.nyctaxi.trips;

Nachdem Sie die materialisierte Ansicht erstellt haben, führen Sie REPAIR TABLE mit SYNC METADATA aus. Siehe REPAIR TABLE.

REPAIR TABLE <mv_name> SYNC METADATA;

Externe Iceberg-Leser können die materialisierte Ansicht lesen, aber nicht darauf schreiben. Informationen zum Lesen der materialisierten Ansicht von einem externen Iceberg-Reader finden Sie unter "Aktivieren des Externen Datenzugriffs auf Streamingtabellen und materialisierte Ansichten".

Partitionsentwicklung

Mit der Partitionsentwicklung können Sie das Partitionierungsschema einer vorhandenen Apache Iceberg-Tabelle ändern, ohne Daten neu zu schreiben. Neue Daten werden mit dem aktualisierten Partitionslayout geschrieben, und vorhandene Daten behalten das ursprüngliche Partitionslayout bei. Apache Iceberg verfolgt die Partitionsspezifikationen und wendet den richtigen Filter zur Abfragezeit an. Siehe Partitionsentwicklung für Apache Iceberg.

Hinweis

Die Partitionsentwicklung wird auf verwalteten Iceberg-Tabellen über externe Iceberg-Engines mithilfe des Iceberg REST-Katalogs, aber nicht über Databricks SQL unterstützt. Ausdrucksbasierte Partitionstransformationen wie years() z. B. und bucket() werden für verwaltete Iceberg-Tabellen nicht unterstützt. Informationen finden Sie unter Einschränkungen.

Informationen zum Konfigurieren des externen Zugriffs finden Sie unter Access Azure Databricks Tabellen von Apache Iceberg-Clients.

Die folgenden Beispiele zeigen, wie Die Partitionsentwicklung mit Spark SQL und der Iceberg-Erweiterung verwendet wird. Informationen zu Apache Iceberg Partition Evolutionssyntax und unterstützten Transformationen finden Sie unter Apache Iceberg Spark DDL.

Hinzufügen eines Partitionsfelds

So fügen Sie einer vorhandenen Tabelle ein neues Partitionsfeld hinzu:

ALTER TABLE catalog.schema.table ADD PARTITION FIELD column_name;

Löschen eines Partitionsfelds

So entfernen Sie ein vorhandenes Partitionsfeld aus einer Tabelle:

ALTER TABLE catalog.schema.table DROP PARTITION FIELD column_name;

Ersetzen eines Partitionsfelds

So tauschen Sie ein Partitionsfeld für ein anderes ohne zwischengeschaltete Neupartition aus:

ALTER TABLE catalog.schema.table REPLACE PARTITION FIELD old_column WITH new_column;

Einschränkungen

Die folgenden Einschränkungen gelten für Iceberg-Tabellen in Azure Databricks und können geändert werden:

  • Iceberg-Tabellen unterstützen nur das Apache Parquet-Dateiformat.
  • Bei Iceberg v2 werden Positionslöschungen und Löschungen auf Basis der Gleichheit nicht unterstützt. Stattdessen unterstützt Azure Databricks Iceberg v3-Löschvektoren für Löschungen auf Zeilenebene.
  • Verzweigungen und Markierungen werden nicht unterstützt. Nur der Hauptzweig ist beim Lesen fremder Iceberg-Tabellen zugänglich.
  • Partitionierung:
    • Die Entwicklung von Partitionen wird bei verwalteten Iceberg-Tabellen nur unterstützt, wenn die Interaktion über externe Iceberg-Engines erfolgt.
    • Fremde Eisbergtabellen unterstützen die Partitionsentwicklung nicht.
    • Die Partitionierung nach BINARY Typ wird nicht unterstützt.
  • Ansichten sind von externen Iceberg-Engines nicht zugänglich.
  • Die folgenden Datentypen werden nicht unterstützt:
    • UUID
    • Fixed(L)
    • TIME
    • Geschachteltes STRUCT mit erforderlichen Feldern
  • Einschränkungen für Iceberg v3 finden Sie unter "Einschränkungen".

Grenzwerte für verwaltete Iceberg-Tabellen

Die folgenden Einschränkungen gelten speziell für verwaltete Iceberg-Tabellen:

  • Verwaltete Iceberg-Tabellen können nur erstellt werden, wenn die Vorhersageoptimierung für die Tabellenwartung aktiviert ist.
  • Die folgenden Tabelleneigenschaften werden vom Unity-Katalog verwaltet und können nicht manuell festgelegt werden:
    • write.location-provider.impl
    • write.data.path
    • write.metadata.path
    • write.format.default
    • write.delete.format.default
  • Der Komprimierungscodec zum Ändern der Tabellenkomprimierung wird nicht unterstützt. Alle Tabellen verwenden standardmäßig Zstd.
  • Die Partitionierung nach Ausdrücken (z. B. years(), months(), days(), , hours()bucket()) wird nicht unterstützt.
  • Features, die in Apache Iceberg nicht unterstützt werden, sind auch für verwaltete Iceberg-Tabellen nicht verfügbar. Dazu gehören generierte Spalten in Delta Lake, Constraints in Azure Databricks und Collation-Unterstützung für Delta Lake.

Grenzwerte für fremde Iceberg Tabellen

Die folgenden Grenzwerte gelten explizit für fremde Iceberg-Tabellen:

  • Zeitreisen werden nur für Iceberg-Momentaufnahmen unterstützt, die zuvor in Azure Databricks gelesen wurden (d. r. Momentaufnahmen, bei denen eine SELECT-Anweisung ausgeführt wurde).
  • Die Verwendung von Buckettransformationsfunktionen für die Iceberg-Partitionierung kann die Abfrageleistung beeinträchtigen, wenn bedingte Filter verwendet werden.
  • Cloudspeicher-Tiering-Produkte wie Amazon S3 sind nicht mit fremden Iceberg-Tabellen integriert. Der Zugriff auf ausländische Iceberg-Tabellen in Azure Databricks kann Daten, die in niedrigeren Speicherebenen archiviert wurden, wiederherstellen.
  • Bei Clustern mit dediziertem Zugriffsmodus werden Lese- und REFRESH FOREIGN TABLE -Operationen auf Iceberg-Tabellen ALL PRIVILEGES.