Verwenden von Apache Iceberg v3-Features

Apache Iceberg v3 verbessert die Abfrageleistung und führt neue Funktionen für verwaltete Tabellen ein, die Iceberg oder Delta Lake mit Iceberg-Lesungen im Unity-Katalog verwenden.

Die wichtigsten Merkmale von Iceberg v3 sind:

Anforderungen

Um verwaltete Tabellen mit Iceberg v3-Features wie georäumlichen Typen zu verwenden, müssen Sie folgende Anforderungen erfüllen:

  • Ein Arbeitsbereich, für den Unity Catalog aktiviert ist.
  • Databricks Runtime 18 LTS und höher.

Erstellen einer neuen Tabelle mit Iceberg v3

Erstelle neue Tabellen mit aktiviertem Iceberg v3 für sowohl verwaltete Delta Lake-Tabellen mit Iceberg-Lesezugriff als auch verwaltete Iceberg-Tabellen.

Delta Lake

Um eine neue verwaltete Tabelle mit Delta Lake mit aktivierten Iceberg-Reads und aktiviertem Iceberg v3 zu erstellen, verwenden Sie folgenden SQL-Befehl:

CREATE OR REPLACE TABLE main.schema.table (c1 INT) TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'iceberg',
  'delta.enableIcebergCompatV3' = 'true'
);

Weitere Informationen zu Iceberg-Lesevorgängen finden Sie unter Lesen von Delta-Lake-Tabellen mit Iceberg-Clients.

Iceberg

Verwenden Sie zum Erstellen einer neuen verwalteten Tabelle mit Iceberg v3 den folgenden SQL-Befehl:

CREATE OR REPLACE TABLE main.schema.table (c1 INT)
USING iceberg
TBLPROPERTIES ('format-version' = 3);

Weitere Informationen zu Iceberg-Tabellen finden Sie unter Was ist Apache Iceberg in Azure Databricks?.

Aktualisieren einer vorhandenen Tabelle auf Iceberg v3

Sie können eine vorhandene Tabelle auf Iceberg v3 aktualisieren, indem Sie:

  1. Aktivieren eines beliebigen v3-Features in einer Tabelle.
  2. Festlegen der Iceberg-Formatversion für eine Tabelle auf 3 (siehe unten).

Important

Tabellen können von v3 auf v2 herabgestuft werden, indem die Tabelle mit RESTORE auf eine Version vor dem Upgrade auf v3 zurückgesetzt wird. Siehe Downgrade einer Tabelle auf eine frühere Version.

Delta Lake

Um eine verwaltete Tabelle mit Delta Lake und Iceberg-Reads auf v3 zu aktualisieren, verwenden Sie folgenden Befehl:

ALTER TABLE catalog.schema.table SET TBLPROPERTIES(
  'delta.enableIcebergCompatV3' = 'true',
  'delta.enableIcebergCompatV2' = 'false'
);

Iceberg

Um eine verwaltete Tabelle mit Iceberg auf v3 zu aktualisieren, verwenden Sie den folgenden Befehl:

ALTER TABLE catalog.schema.table SET TBLPROPERTIES (
  'format-version' = 3
);

Aktivieren von Löschvektoren

Löschvektoren optimieren Datenänderungsvorgänge auf Zeilenebene und sind in allen neuen Iceberg v3-Tabellen standardmäßig aktiviert. Siehe Löschungsvektoren in Databricks.

Hinweis

Durch Aktivieren von Löschvektoren in einer vorhandenen Iceberg-Tabelle wird die Iceberg-Formatversion auf 3 aktualisiert.

Delta Lake

Um eine neue verwaltete Tabelle mit Delta Lake mit aktivierten Iceberg-Reads, Iceberg v3 und Löschvektoren zu erstellen, setzen Sie die folgenden Tabelleneigenschaften:

CREATE TABLE catalog.schema.table (c1 INT) TBLPROPERTIES(
  'delta.enableDeletionVectors' = 'true',
  'delta.enableIcebergCompatV3' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

Iceberg

Um eine neue verwaltete Tabelle mit Iceberg v3 mit aktivierten Löschvektoren zu erstellen, legen Sie die iceberg.enableDeletionVectors Tabelleneigenschaft fest:

CREATE TABLE catalog.schema.table (c1 INT)
USING ICEBERG TBLPROPERTIES (
  'iceberg.enableDeletionVectors' = 'true'
);

Verwenden des VARIANT-Datentyps

Mit dem VARIANT-Datentyp können Sie halbstrukturierte Daten speichern und abfragen.

Hinweis

Die Verwendung von VARIANT in einer vorhandenen Iceberg-Tabelle aktualisiert die Iceberg-Formatversion auf 3.

Delta Lake

So erstellen Sie eine neue verwaltete Tabelle unter Verwendung von Delta Lake mit Iceberg-Lesevorgängen und einer VARIANT-Spalte:

CREATE TABLE catalog.schema.deltaTable (col VARIANT) TBLPROPERTIES(
  'delta.enableIcebergCompatV3' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

Iceberg

So erstellen Sie eine neue verwaltete Tabelle mit Iceberg v3 mit einer VARIANT-Spalte:

CREATE TABLE catalog.schema.icebergTable (col VARIANT) USING iceberg;

Verwenden Sie den ALTER TABLE Befehl, um einer vorhandenen Tabelle eine VARIANT-Spalte hinzuzufügen:

ALTER TABLE catalog.schema.table ADD COLUMN variant_col VARIANT;

Verwenden Sie die Datentypen GEOMETRIE und GEOGRAPHIE

Verwenden Sie die Datentypen GEOGRAPHY und GEOMETRY, um Geodaten zu speichern und abzufragen. Siehe GEOMETRY Typ und GEOGRAPHY Typ.

Hinweis

Mit GEOMETRY oder GEOGRAPHY in einer bestehenden Iceberg-Tabelle wird die Iceberg-Format-Version auf 3 aufgerüstet.

Delta Lake

So erstellen Sie eine neue verwaltete Tabelle mit Delta Lake und Iceberg-Lesezugriff sowie GEOMETRY- oder GEOGRAPHY-Spalten:

CREATE TABLE catalog.schema.table (
  geom_col GEOMETRY(3857),
  geog_col GEOGRAPHY(4326)
) TBLPROPERTIES(
  'delta.enableIcebergCompatV3' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

Iceberg

Um eine neue verwaltete Tabelle mit Iceberg v3 mit GEOMETRY oder GEOGRAPHY Spalten zu erstellen:

CREATE TABLE catalog.schema.table (
  geom_col GEOMETRY(3857),
  geog_col GEOGRAPHY(4326)
) USING iceberg;

Um eine GEOMETRY Spalte oder GEOGRAPHY zu einer bestehenden Tabelle hinzuzufügen, verwenden Sie den ALTER TABLE Befehl:

ALTER TABLE catalog.schema.table ADD COLUMN geom_col GEOMETRY(3857);
ALTER TABLE catalog.schema.table ADD COLUMN geog_col GEOGRAPHY(4326);

Erstelle eine Tabelle mit Schreibstandardeinstellungen

Iceberg v3 definiert zwei Arten von Standardwerten:

  • Schreibstandardeinstellungen gelten für neue Zeilen, wenn ein Schreiben die entsprechende Spalte weglässt. Azure Databricks unterstützt Write Defaults.
  • Anfängliche Standardeinstellungen gelten für bereits bestehende Zeilen, wenn eine neue Spalte hinzugefügt wird. Azure Databricks unterstützt keine anfänglichen Standardeinstellungen.

Delta Lake

Zum Erstellen einer neuen verwalteten Tabelle mit Delta Lake, Iceberg-Lesezugriff und einem standardmäßigen Schreibmodus:

CREATE TABLE catalog.schema.table (
  id INT,
  row_status STRING DEFAULT 'active'
) TBLPROPERTIES(
  'delta.enableIcebergCompatV3' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg'
);

Iceberg

Um eine neue verwaltete Tabelle mit Iceberg v3 und einem Schreibstandard zu erstellen:

CREATE TABLE catalog.schema.table (
  id INT,
  row_status STRING DEFAULT 'active'
) USING iceberg;

Um die Standardeinstellung anzuwenden, fügen Sie eine Zeile ohne row_status: ein

INSERT INTO catalog.schema.table (id) VALUES (1);
SELECT * FROM catalog.schema.table;

Die vorangehende Abfrage liefert Folgendes, wobei auf row_status der Standardwert angewendet wird:

id  row_status
1   active

Herabstufen einer Tabelle auf eine frühere Apache Iceberg-Version

Wenn Sie eine Tabelle vor dem Upgrade auf Iceberg v3 auf einen Zustand zurücksetzen müssen, können Sie den RESTORE Befehl verwenden.

set spark.databricks.delta.restore.protocolDowngradeAllowed = true;
RESTORE TABLE catalog.schema.table TO VERSION AS OF 1;
set spark.databricks.delta.restore.protocolDowngradeAllowed = false;

Einschränkungen

Azure Databricks unterstützt Version 3 der Iceberg-Spezifikation mit den folgenden Ausnahmen:

  • Anfängliche Standardeinstellungen werden nicht unterstützt. Wenn eine neue Spalte hinzugefügt wird, legt ein initialer Standard den Wert für bereits vorhandene Zeilen fest.
  • Die folgenden Datentypen werden nicht unterstützt:
    • Unbekannter Typ
    • Nanosekunden-Genauigkeitsstempel.
  • Multiargumenttransformationen werden nicht unterstützt.