Freigeben über


Was ist Apache Iceberg in Azure Databricks?

Von Bedeutung

Unity Catalog-verwaltete Iceberg-Tabellen sind in der öffentlichen Vorschau in Databricks Runtime 16.4 LTS und höher verfügbar. Fremde Iceberg-Tabellen sind auch in der Public Preview in Databricks Runtime 16.4 LTS und höher.

Iceberg v3-Features sind in der public Preview in Databricks Runtime 18.0 und höher verfügbar. Siehe "Apache Iceberg v3-Features verwenden".

Apache Iceberg ist ein Open-Source-Tabellenformat für Analyseworkloads. Es unterstützt Features wie Schemaentwicklung, Zeitreise und ausgeblendete Partitionierung. Wie Delta Lake bietet Iceberg eine Abstraktionsebene, die ACID-Transaktionen auf daten ermöglicht, die im Objektspeicher gespeichert sind. Azure Databricks unterstützt Iceberg-Tabellen, die das Apache-Parkettdateiformat verwenden. Iceberg behält die Atomarität und Konsistenz bei, indem neue Metadatendateien für jede Tabellenänderung erstellt werden.

Ein Iceberg-Katalog ist die oberste Ebene der Iceberg-Tabellenarchitektur. Sie behandelt Vorgänge wie das Erstellen, Ablegen und Umbenennen von Tabellen. Die Hauptverantwortung liegt in der Bereitstellung der aktuellen Metadaten, wenn eine Tabelle geladen wird. Azure Databricks unterstützt Iceberg-Tabellen, die von:

Alle Iceberg-Tabellen in Azure Databricks folgen der Spezifikation des offenen Iceberg-Tabellenformats. Siehe die Iceberg-Tabellenspezifikation.

Erstellen von Iceberg-Tabellen im Unity-Katalog

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

Verwaltete Iceberg-Tabellen sind vollständig in die Funktionen der Azure Databricks-Plattform 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. Die Predictive Optimization automatisiert diese Aufgaben, um die Speicherkosten zu reduzieren und die Abfragegeschwindigkeit zu verbessern. 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. Siehe Eisberg-Tabellenbeschrä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;

Iceberg-Tabellenbeschrä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.
  • Azure Databricks unterstützt die Versionen 1, 2 und 3 der Iceberg-Spezifikation.
    • Informationen zu v3-spezifischen Einschränkungen finden Sie unter "Einschränkungen".
  • Iceberg v2-Positionslösungen und gleichheitsbasierte Lösungen werden 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 werden nicht unterstützt.
  • Die folgenden Datentypen werden nicht unterstützt:
    • UUID
    • Fixed(L)
    • TIME
    • Geschachtelt STRUCT mit erforderlichen Feldern

Grenzwerte für verwaltete Iceberg-Tabellen

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

  • Die Vektorsuche wird nicht unterstützt.
  • Iceberg unterstützt keine Änderungsdatenfeeds. Daher wird die inkrementelle Verarbeitung nicht unterstützt, wenn verwaltete Iceberg-Tabellen als Quelle gelesen werden:
    • Materialisierte Ansichten und Streaming-Tabellen
    • Datenprofilierung
    • Onlinetabellen
    • Lakebase
    • Datenklassifizierung
  • 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.