Was ist Apache Iceberg in Azure Databricks?

Apache Iceberg ist ein Open-Source-Tabellenformat für Analyseworkloads. Es unterstützt Features wie Schemaentwicklung, Zeitreise und ausgeblendete Partitionierung. 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

Sie müssen die folgenden Anforderungen erfüllen:

  • Ein Arbeitsbereich, für den Unity Catalog aktiviert ist.
  • Verwenden Sie Databricks Runtime 16.4 LTS oder höher für verwaltete Iceberg-Tabellen und fremde Iceberg-Tabellen.

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.
  • Verwaltete Iceberg-Tabellen unterstützen auch flüssige Clustering, wodurch die Abfrageleistung verbessert wird.
  • Durch die predictive Optimierung werden Vorgänge automatisiert, um die Speicherkosten zu reduzieren und die Abfragegeschwindigkeit zu verbessern.
  • Verwaltete Iceberg-Tabellen unterstützen auch materialisierte Ansichten und Streamingtabellen.

Databricks empfiehlt die Verwendung von Iceberg-Clients 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

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

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.
  • Für Iceberg v2 werden Position Deletes und equality-basierte Deletes 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
    • Geschachtelt 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:

  • Die Vektorsuche wird nicht unterstützt. Siehe Vektorsuche.
  • 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.