Freigeben über


Kompatibilitätsmodus

Von Bedeutung

Dieses Feature befindet sich in der Public Preview.

Im Kompatibilitätsmodus von Unity Catalog können Sie verwaltete Tabellen, materialisierte Ansichten und Streamingtabellen aus externen Systemen bei gleichzeitiger Gewährleistung optimaler Leistung in Azure Databricks lesen. Diese Funktion erzeugt automatisch schreibgeschützte Versionen Ihrer Tabellen, auf die von jedem Delta Lake- oder Iceberg-Client zugegriffen werden kann.

Überblick

Wenn diese Option in einer verwalteten Tabelle, einer Streamingtabelle oder einer materialisierten Ansicht aktiviert ist, generiert der Kompatibilitätsmodus eine schreibgeschützte Version Ihrer Tabelle an einem ausgewählten Speicherort. Diese Kompatibilitätsversion enthält v1-Metadaten für delta Lake- und Iceberg-Formate, die die folgenden Funktionen bereitstellen:

  • Interoperabilität mit jedem Delta Lake-Client: Lesen Sie Ihre verwalteten Tabellen, einschließlich Streamingtabellen oder materialisierten Ansichten, von Clients wie Amazon Athena, Microsoft Fabric, Snowflake und Amazon Redshift direkt vom Speicher oder über die Unity REST-API
  • Interoperabilität mit jedem Iceberg-Client: Lesen Sie Ihre verwalteten Tabellen, einschließlich Streamingtabellen oder materialisierten Ansichten, von Iceberg-Clients wie Apache Spark, Apache Trino und Snowflake über den Iceberg REST-Katalog
  • Set-and-Forget-Automatisierung: Automatisieren von Daten- und Metadatenaktualisierungen für Kompatibilitätsversionen mit der Möglichkeit, Aktualisierungsintervalle in nahezu Echtzeit zu konfigurieren

Voraussetzungen

Um den Kompatibilitätsmodus in einer Tabelle zu aktivieren, müssen Sie Unity-Katalog verwenden. Es werden nur Streamingtabellen im Unity-Katalog, materialisierte Ansichten des Unity-Katalogs und verwaltete Unity-Katalogtabellen unterstützt. Externe Tabellen des Unity-Katalogs werden nicht unterstützt.

Stellen Sie außerdem sicher, dass Sie einen externen Speicherort haben, der im Unity-Katalog mit den richtigen Einstellungen und Berechtigungen registriert ist:

  • Der Zielspeicherort muss in Ihrem Speicherkonto vorhanden sein und leer sein.
  • Der Zielspeicherort oder ein übergeordneter Ordner muss als externer Speicherort im Unity-Katalog registriert werden.
  • Sie müssen über CREATE EXTERNAL TABLE Privilegien für den externen Speicherort verfügen.
  • Der Zielspeicherort und alle übergeordneten oder untergeordneten Ordner dürfen nicht innerhalb der letzten 7 Tage als Kompatibilitätsmodusspeicherort für eine andere Tabelle verwendet werden.

Kompatibilitätsmodus für Tabellen aktivieren

Legen Sie bei Streamingtabellen, materialisierten Ansichten und verwalteten flachen Klonen die folgenden Tabelleneigenschaften zum Zeitpunkt der Tabellenerstellung fest.

CREATE [STREAMING TABLE | MATERIALIZED VIEW | TABLE] my_catalog.my_schema.my_table
TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>'
)

Nur für verwaltete Tabellen im Unity-Katalog können Sie den Kompatibilitätsmodus aktivieren, wenn Sie eine vorhandene Tabelle ändern:

-- For existing managed tables
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>'
)

Es dauert bis zu einer Stunde, um eine Kompatibilitätsversion zum ersten Mal zu generieren. Sie können die Tabelle sofort aktualisieren , um zu bestätigen, dass sie funktioniert.

Hinweis

Sie müssen den vollständigen dreiteiligen Tabellennamen (catalog.schema.table_name) angeben. Zum Beispiel ist users.john.my_table der Katalog und users das Schema für john.

Überprüfen, ob der Kompatibilitätsmodus aktiviert ist

Um zu überprüfen, ob der Kompatibilitätsmodus in der Tabelle aktiviert ist, überprüfen Sie, ob die delta.universalFormat.enabledFormats = 'compatibility' Tabelleneigenschaft vorhanden ist. Sie können diese Eigenschaft in der Benutzeroberfläche des Katalog-Explorers auf der Registerkarte "Details" für Ihre Tabelle anzeigen.

Sie können auch die folgenden SQL-Befehle in einem Notizbuch ausführen:

DESC DETAIL my_catalog.my_schema.my_table
DESC EXTENDED my_catalog.my_schema.my_table

Suchen Sie in der Ausgabe nach diesen Eigenschaften:

  • delta.universalFormat.enabledFormats: "compatibility" – Gibt an, dass der Kompatibilitätsmodus aktiviert ist.
  • delta.universalFormat.compatibility.location – Zeigt den Speicherort der Kompatibilitätsmodusversion an.

Konfigurieren von Aktualisierungsintervallen

Für verwaltete Tabellen im Unity-Katalog können Sie konfigurieren, wie häufig die Kompatibilitätsmodusversion aktualisiert wird, indem Sie das Aktualisierungsintervall festlegen:

-- Evaluate whether a refresh is needed after every commit (fastest)
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>',
  'delta.universalFormat.compatibility.targetRefreshInterval' = '0 MINUTES'
)

-- Refresh hourly (default)
ALTER TABLE my_catalog.my_schema.my_table SET TBLPROPERTIES(
  'delta.universalFormat.enabledFormats' = 'compatibility',
  'delta.universalFormat.compatibility.location' = '<location>',
  'delta.universalFormat.compatibility.targetRefreshInterval' = '1 HOUR'
)

Das Standardmäßige Aktualisierungsintervall ist 1 HOUR. Das Festlegen des Aktualisierungsintervalls unter 1 Stunde wird nicht empfohlen und macht keine Aktualisierungen häufiger. Die Ausnahme ist, wenn Sie das Aktualisierungsintervall festlegen auf 0 MINUTES. In diesem Fall sucht Azure Databricks nach jedem Commit auf Änderungen und löst bei Bedarf eine Aktualisierung aus.

Für Streamingtabellen und materialisierte Ansichten ist kein Aktualisierungsintervall erforderlich. Der Standardwert lautet 0 MINUTES.

Hinweis

Änderungen, die sich erheblich auf aktualisierungszeiten auswirken (z. B. Spaltenumbenennung oder Aktivieren der Typverbreiterung), werden stundenweise ausgeführt, unabhängig vom Zielaktualisierungsintervall.

Manuelle Aktualisierung

So lösen Sie eine Aktualisierung der Kompatibilitätsversion manuell aus:

REFRESH [TABLE | STREAMING TABLE | MATERIALIZED VIEW] my_catalog.my_schema.my_table SYNC UNIFORM

Die manuelle Aktualisierung der Anzeige eignet sich zum Testen, ob der Kompatibilitätsmodus ordnungsgemäß funktioniert, oder um sicherzustellen, dass Ihre Kompatibilitätsversion auf dem neuesten Stand ist, bevor ein weiteres Auslesen erfolgt. Das Warten auf die automatischen Aktualisierungen kann jedoch kostengünstiger sein.

Überwachen des Daten- und Metadatengenerierungsstatus

Der Kompatibilitätsmodus generiert Daten und Metadaten automatisch und asynchron. Bei verwalteten Tabellen im Unity-Katalog erfolgt die Generierung standardmäßig stündlich oder basierend auf Ihrem konfigurierten Aktualisierungsintervall. Bei Streamingtabellen und materialisierten Ansichten erfolgt die Generierung nach Tabellenaktualisierungen, wenn neue Commits vorhanden sind.

So überprüfen Sie, ob Daten und Metadaten erfolgreich generiert wurden:

  1. Verwenden Sie DESCRIBE HISTORY, um die neueste Version Ihrer Quelltabelle zu finden.

    DESC HISTORY my_catalog.my_schema.my_table
    

    DESCRIBE HISTORY Befehl zum Überprüfen der neuesten Quelltabellenversion

    Dieser Befehl gibt den Verlauf der Aktualisierungen im Kompatibilitätsmodus zurück, einschließlich der Delta Lake-Version und des Zeitstempels. Die oberste Zeile enthält die neueste Version und den Zeitstempel.

  2. Verwenden Sie DESCRIBE EXTENDED, um die entsprechende Version des Kompatibilitätsmodus zu finden.

    DESC EXTENDED my_catalog.my_schema.my_table
    

    Befehl

    Suchen Sie nach Feldern unter "Uniform Compatibility Information":

    • Letzte aktualisierte Version: Die Delta Lake-Version, die zuletzt mit dem Kompatibilitätsmodus aktualisiert wurde
    • Letzte Aktualisierung: Der Zeitstempel der letzten Aktualisierung

    Der Kompatibilitätsmodus ist aktuell, wenn die Tabellenversion mit der Version übereinstimmt, die in Schritt 1 gefunden wurde.

  3. Verwenden Sie DESC HISTORY für die Kompatibilitätsversion selbst.

    DESC HISTORY delta.\`<compatibility_location>\`
    

    DESCRIBE HISTORY Befehl zum Überprüfen des Kompatibilitätsversionsverlaufs

  4. Zeigen Sie im Katalog-Explorer die Metadatenfelder für die Kompatibilitätsversion an. Der Kompatibilitätsmodus ist auf dem neuesten Stand, wenn die Delta Lake-Version mit der Version übereinstimmt, die in Schritt 3 gefunden wurde.

    Überprüfen der neuesten Tabellenmetadatenversion

Kosten überwachen

Die Predictive Optimization behandelt den Computecluster, der automatische Aktualisierungen für den Kompatibilitätsmodus durchführt. Um die zugeordneten Kosten anzuzeigen, fragen Sie die Systemabrechnungstabellen ab:

SELECT
  DATE_TRUNC('DAY', start_time) AS day,
  SUM(usage_quantity) AS dbus
FROM
  system.storage.predictive_optimization_operations_history
WHERE
  operation_type = "COMPATIBILITY_MODE_REFRESH"
GROUP BY 1
ORDER BY 1 DESC;

Diese Abfrage meldet die Verwendung nur für automatische Aktualisierungen. Kosten für manuelle Aktualisierungen sind mit Ihrer Berechnung verknüpft, und es gibt keine direkte Möglichkeit, diese Kosten separat nachzuverfolgen. Im Allgemeinen ist die Kosten eines manuellen Triggers proportional zu den Kosten des anfänglichen Schreibvorgangs an die ursprüngliche Tabelle.

Nicht verwendete Datendateien entfernen

Um nicht verwendete Datendateien für die Kompatibilitätsversion Ihrer Tabelle zu entfernen, verwenden Sie Folgendes VACUUM:

VACUUM delta.'<compatibility_mode_location_path>';

Um den Pfad für den Kompatibilitätsmodus zu finden, verwenden Sie den DESCRIBE EXTENDED Befehl unter "Überprüfen, ob der Kompatibilitätsmodus aktiviert ist". In der Ausgabe ist der Wert von delta.universalFormat.compatibility.location die Position.

Kompatibilitätsversionen von externen Clients abrufen

Sie können jeden Delta Lake- oder Iceberg-Client verwenden, um Daten aus Kompatibilitätsversionen zu lesen. Beispiele für Amazon Athena, Snowflake (Delta Reader) und Fabric finden Sie unten.

Amazon Athena

  1. Erstellen Sie im Athena-Abfrage-Editor eine externe Tabelle mit der angegebenen Position:

    CREATE EXTERNAL TABLE <table_name>
    LOCATION '<compatibility_location>'
    TBLPROPERTIES ('table_type' = 'DELTA')
    
  2. Lesen Sie die Tabelle:

    SELECT * FROM <table_name>
    

Snowflake Delta Lake-Leser

  1. Erstellen Sie die Speicherintegration für den Zugriff auf den Speicherort (siehe Snowflake-Dokumentation).

  2. Erstellen einer externen Tabelle mit Delta Lake-Format:

    CREATE OR REPLACE EXTERNAL TABLE <table_name>
    WITH LOCATION = @<my_location>
    FILE_FORMAT = (TYPE = PARQUET)
    TABLE_FORMAT = DELTA
    AUTO_REFRESH = false
    REFRESH_ON_CREATE = false;
    
  3. Aktualisieren Sie die Tabelle (die automatische Aktualisierung wird für das Delta Lake-Format in Snowflake nicht unterstützt):

    ALTER EXTERNAL TABLE <table_name> REFRESH;
    
  4. Lesen Sie die Tabelle:

    SELECT * FROM <table_name>;
    

Microsoft Fabric

  1. Erstellen Sie ein Fabric-Kapazitäts-, Arbeitsbereichs- und Synapse-Notizbuch.

  2. Erstellen Sie ein Seehaus mit Daten am Kompatibilitätsort.

  3. Lesen Sie die Dateien als Delta Lake-Tabelle:

    spark.read.format("delta").load("Files/<path_to_data>")
    

Lesen von Kompatibilitätsversionen aus der Unity-REST-API

Tabellen mit aktivierter Kompatibilitätsmodus können anhand des Namens über die Unity-REST-API mit speziellen Parametern gelesen werden. Legen Sie für Streamingtabellen den folgenden API-Parameter fest:

GET /api/2.1/unity-catalog/tables/{full_name}?read_streaming_table_as_managed=true

Legen Sie für materialisierte Ansichten den folgenden API-Parameter fest:

GET /api/2.1/unity-catalog/tables/{full_name}?read_materialized_view_as_managed=true

Lesen von Kompatibilitätsversionen aus dem Iceberg REST-Katalog

Tabellen mit aktivierter Kompatibilitätsmodus können mit dem Iceberg REST-Katalog von jedem Iceberg-Client gelesen werden. Der Kompatibilitätsmodus funktioniert automatisch für Delta Lake- und Iceberg-Tabellenformate.

Setupanforderungen

  1. Aktivieren sie den Zugriff auf externe Daten im Metastore.
  2. Gewähren Sie EXTERNAL USE SCHEMA berechtigungen für das Schema.
  3. Erstellen Sie ein persönliches Azure Databricks-Zugriffstoken (PAT).

Apache Spark-Konfiguration

bin/spark-sql --packages org.apache.iceberg:iceberg-spark-runtime-3.5_2.12:1.8.0,org.apache.iceberg:iceberg-azure-bundle:1.8.0 \
  --conf "spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions" \
  --conf spark.sql.catalog.catalog_name=org.apache.iceberg.spark.SparkCatalog \
  --conf spark.sql.catalog.catalog_name.type=rest \
  --conf spark.sql.catalog.catalog_name.uri=<workspace-url>/api/2.1/unity-catalog/iceberg-rest \
  --conf spark.sql.catalog.catalog_name.token=<PAT> \
  --conf spark.sql.catalog.catalog_name.warehouse=<uc-catalog-name>

Weitere Informationen finden Sie unter Verwenden von Iceberg-Tabellen mit Apache Spark.

Snowflake-Konfiguration

CREATE OR REPLACE CATALOG INTEGRATION my_uc_int
  CATALOG_SOURCE = ICEBERG_REST
  TABLE_FORMAT = ICEBERG
  CATALOG_NAMESPACE = '<uc-schema-name>'
  REST_CONFIG = (
    CATALOG_URI = '<workspace-url>/api/2.1/unity-catalog/iceberg-rest'
    CATALOG_NAME = '<uc-catalog-name>'
    ACCESS_DELEGATION_MODE = VENDED_CREDENTIALS
  )
  REST_AUTHENTICATION = (
    TYPE = BEARER
    BEARER_TOKEN = '<PAT>'
  )
  ENABLED = TRUE;

CREATE OR REPLACE ICEBERG TABLE my_table
  CATALOG = 'my_uc_int'
  CATALOG_TABLE_NAME = '<uc-st/mv-name>';

Kompatibilitätsmodus deaktivieren

Um den Kompatibilitätsmodus zu deaktivieren, deaktivieren Sie die entsprechende Tabelleneigenschaft:

-- For UC managed tables
ALTER TABLE my_table UNSET TBLPROPERTIES('delta.universalFormat.enabledFormats')

-- For streaming tables and materialized views
CREATE OR REPLACE [STREAMING TABLE | MATERIALIZED VIEW] my_table
TBLPROPERTIES('delta.universalFormat.enabledFormats' = '')

Warnung

Durch das Aufheben des Kompatibilitätsmodus werden die Daten- und Metadatengenerierung sofort beendet. Nach 7 Tagen werden die zugehörigen Daten und Metadaten gelöscht. Innerhalb dieses 7-Tage-Zeitraums können Sie die Daten und Metadaten wiederherstellen, indem Sie den Kompatibilitätsmodus in derselben Tabelle erneut aktivieren.

Einschränkungen

  • Schreibgeschützter Zugriff: Die Kompatibilitätsversion ist schreibgeschützt. Sie können nicht in die Kompatibilitätsversion schreiben.
  • Keine RLS/CLS-Unterstützung: Sie können den Kompatibilitätsmodus für Tabellen mit Row-Level Sicherheit (RLS) oder Column-Level Security (CLS) nicht aktivieren.
  • Keine Partitionsspaltenumbenennung: Partitionsspaltenumbenennung wird für Tabellen mit aktivierter Kompatibilitätsmodus nicht unterstützt. Datenspaltenumbenennung wird unterstützt.
  • Eingeschränkte Tabellenfeatures: Die folgenden Funktionen sind in der Kompatibilitätsversion nicht verfügbar:
    • Sortierspalten
    • Primärschlüssel
    • Zeitreise
    • Ändern des Datenfeeds
    • Spaltennamen mit Sonderzeichen (werden umbenannt)