Dela via


Kompatibilitetsläge

Viktigt!

Den här funktionen finns som allmänt tillgänglig förhandsversion.

Med hjälp av kompatibilitetsläge kan du läsa hanterade Unity Catalog-tabeller, materialiserade vyer och strömma tabeller från externa system samtidigt som du behåller optimala prestanda på Azure Databricks. Den här funktionen genererar automatiskt skrivskyddade versioner av dina tabeller som kan nås av alla Delta Lake- eller Iceberg-klienter.

Översikt

När det är aktiverat i en hanterad tabell, en strömmande tabell eller en materialiserad vy genererar kompatibilitetsläget en skrivskyddad version av tabellen på en vald plats. Den här kompatibilitetsversionen innehåller v1-metadata för både Delta Lake- och Iceberg-format, vilket ger följande funktioner:

  • Samverkan med alla Delta Lake-klienter: Läs dina hanterade tabeller, inklusive strömmande tabeller eller materialiserade vyer, från klienter som Amazon Athena, Microsoft Fabric, Snowflake och Amazon Redshift direkt från lagring eller via Unity REST API
  • Samverkan med alla Iceberg-klienter: Läs dina hanterade tabeller, inklusive strömmande tabeller eller materialiserade vyer, från Iceberg-klienter som Apache Spark, Apache Trino och Snowflake via Iceberg REST-katalogen
  • Set-and-forget automation: Automatisera data- och metadatauppdateringar för kompatibilitetsversioner, med möjlighet att konfigurera uppdateringsintervall till nästan realtid

Förutsättningar

Om du vill aktivera kompatibilitetsläge i en tabell måste du använda Unity Catalog. Endast strömningstabeller i Unity Catalog, materialiserade vyer i Unity Catalog och hanterade Unity Catalog-tabeller stöds. Externa tabeller i Unity Catalog stöds inte.

Kontrollera dessutom att du har en extern plats registrerad i Unity Catalog med rätt inställningar och behörigheter:

  • Målplatsen måste finnas i ditt lagringskonto och vara tom.
  • Målplatsen eller någon av dess överordnade mappar måste registreras som en extern plats i Unity Catalog.
  • Du måste ha CREATE EXTERNAL TABLE behörighet för den externa platsen.
  • Målplatsen och eventuella överordnade eller underordnade mappar får inte ha använts som en plats för kompatibilitetsläge för en annan tabell under de senaste 7 dagarna.

Aktivera kompatibilitetsläge för tabeller

För strömmande tabeller, materialiserade vyer och hanterade grunda kloner anger du följande tabellegenskaper när tabellen skapas:

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

Endast för hanterade unity-katalogtabeller kan du aktivera kompatibilitetsläge när du ändrar en befintlig tabell:

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

Det tar upp till en timme att generera en kompatibilitetsversion för första gången. Du kan uppdatera tabellen manuellt omedelbart för att bekräfta att den fungerar.

Anmärkning

Du måste ange det fullständiga tabellnamnet i tre delar (catalog.schema.table_name). Till exempel för users.john.my_table, usersär katalogen och john är schemat.

Kontrollera om kompatibilitetsläget är aktiverat

Kontrollera att kompatibilitetsläget är aktiverat i tabellen genom att kontrollera att tabellegenskapen delta.universalFormat.enabledFormats = 'compatibility' finns. Du kan visa den här egenskapen i katalogutforskarens användargränssnitt på informationsfliken för tabellen.

Du kan också köra följande SQL-kommandon i en notebook-fil:

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

Leta efter de här egenskaperna i utdata:

  • delta.universalFormat.enabledFormats: "compatibility" – Anger att kompatibilitetsläget är aktiverat
  • delta.universalFormat.compatibility.location – Visar platsen för kompatibilitetslägesversionen

Konfigurera uppdateringsintervall

För hanterade tabeller i Unity Catalog kan du konfigurera hur ofta versionen av kompatibilitetsläget uppdateras genom att ange uppdateringsintervallet:

-- 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'
)

Standarduppdateringsintervallet är 1 HOUR. Att ställa in uppdateringsintervallet under 1 timme rekommenderas inte och gör inte att uppdateringar sker oftare. Undantaget är när du anger uppdateringsintervallet till 0 MINUTES. I det här fallet söker Azure Databricks efter ändringar efter varje incheckning och utlöser en uppdatering om det behövs.

För strömmande tabeller och materialiserade vyer krävs inget uppdateringsintervall. 0 MINUTES är standardvärdet.

Anmärkning

Ändringar som avsevärt påverkar uppdateringstiderna (till exempel kolumnbyte eller aktivering av typbreddning) utförs varje timme oavsett måluppdateringsintervallet.

Manuell uppdatering

Så här utlöser du en uppdatering av kompatibilitetsversionen manuellt:

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

Manuell uppdatering är användbar för att testa att kompatibilitetsläget fungerar korrekt eller för att garantera att din kompatibilitetsversion är aktuell innan en efterföljande avläsning. Att vänta på de automatiska uppdateringarna kan dock vara mer kostnadseffektivt.

Övervaka genereringsstatus för data och metadata

Kompatibilitetsläget genererar data och metadata automatiskt och asynkront. För hanterade Unity Catalog-tabeller sker genereringen per timme som standard eller baserat på ditt konfigurerade uppdateringsintervall. För strömmande tabeller och materialiserade vyer sker genereringen efter tabelluppdateringar när det finns nya commits.

Så här kontrollerar du om data och metadata har genererats:

  1. Använd DESCRIBE HISTORY för att hitta den senaste versionen av källtabellen:

    DESC HISTORY my_catalog.my_schema.my_table
    

    DESCRIBE HISTORY kommando för att kontrollera den senaste tabellversionen

    Det här kommandot returnerar uppdateringshistoriken till Kompatibilitetsläge, inklusive Delta Lake-versionen och tidsstämpeln. Den översta raden innehåller den senaste versionen och tidsstämpeln.

  2. Använd DESCRIBE EXTENDED för att hitta motsvarande version av kompatibilitetsläget:

    DESC EXTENDED my_catalog.my_schema.my_table
    

    DESCRIBE EXTENDED-kommandot för att kontrollera kompatibilitetslägets version

    Leta efter fält under Enhetlig kompatibilitetsinformation:

    • Senast uppdaterad version: Delta Lake-versionen som senast uppdaterades med kompatibilitetsläge
    • Senast uppdaterad: Tidsstämpeln för den senaste uppdateringen

    Kompatibilitetsläget är up-to-date om tabellversionen matchar den version som finns i steg 1.

  3. Använd DESC HISTORY på själva kompatibilitetsversionen:

    DESC HISTORY delta.\`<compatibility_location>\`
    

    DESCRIBE HISTORY kommando för att kontrollera den senaste tabellversionen

  4. I Katalogutforskaren visar du metadatafälten för kompatibilitetsversionen. Kompatibilitetsläget är up-to-date om Delta Lake-versionen matchar den version som finns i steg 3.

    Kontrollera den senaste tabellmetadataversionen

Övervaka kostnader

Förutsägelseoptimering hanterar beräkningsklustret som gör automatiska uppdateringar för kompatibilitetsläge. Om du vill visa associerade kostnader hämtar du systemets faktureringstabeller:

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;

Den här frågan rapporterar endast användning för automatiska uppdateringar. Kostnader för manuella uppdateringar är associerade med din beräkning och det finns inget direkt sätt att separat spåra dessa kostnader. I allmänhet är kostnaden för en manuell utlösare proportionell mot kostnaden för den första skrivåtgärden till den ursprungliga tabellen.

Ta bort oanvända datafiler

Om du vill ta bort oanvända datafiler i kompatibilitetsversionen av tabellen använder du VACUUM:

VACUUM delta.'<compatibility_mode_location_path>';

Om du vill hitta sökvägen till kompatibilitetsläget använder du DESCRIBE EXTENDED kommandot i Kontrollera om kompatibilitetsläget är aktiverat. I utdata är värdet delta.universalFormat.compatibility.location för platsen.

Läsa kompatibilitetsversioner från externa klienter

Du kan använda valfri Delta Lake- eller Iceberg-klient för att läsa data från kompatibilitetsversioner. Se nedan för exempel för Amazon Athena, Snowflake (Delta-läsare) och Fabric.

Amazon Athena

  1. I frågeredigeraren för Athena skapar du en extern tabell med den angivna platsen:

    CREATE EXTERNAL TABLE <table_name>
    LOCATION '<compatibility_location>'
    TBLPROPERTIES ('table_type' = 'DELTA')
    
  2. Läs tabellen:

    SELECT * FROM <table_name>
    

Snowflake Delta Lake-läsare

  1. Skapa lagringsintegrering för att få åtkomst till lagringsplatsen (se Snowflake-dokumentationen).

  2. Skapa en extern tabell med 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. Uppdatera tabellen (automatisk uppdatering stöds inte för Delta Lake-format i Snowflake):

    ALTER EXTERNAL TABLE <table_name> REFRESH;
    
  4. Läs tabellen:

    SELECT * FROM <table_name>;
    

Microsoft Fabric

  1. Skapa en Fabrickapacitet, arbetsyta och Synapse notebook.

  2. Skapa ett lakehouse med data på kompatibilitetsplatsen.

  3. Läs filerna som en Delta Lake-tabell:

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

Läsa kompatibilitetsversioner från Unity REST API

Tabeller med kompatibilitetsläge aktiverat kan läsas med namn via Unity REST API med särskilda parametrar. För direktuppspelningstabeller anger du följande API-parameter:

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

För materialiserade vyer anger du följande API-parameter:

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

Läsa kompatibilitetsversioner från Iceberg REST-katalogen

Tabeller med kompatibilitetsläge aktiverat kan läsas från valfri Iceberg-klient med hjälp av Iceberg REST-katalogen. Kompatibilitetsläget fungerar automatiskt för både Delta Lake- och Iceberg-tabellformat.

Installationskrav

  1. Aktivera extern dataåtkomst i metaarkivet.
  2. Bevilja EXTERNAL USE SCHEMA behörighet för schemat.
  3. Skapa en personlig åtkomsttoken för Azure Databricks (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>

Mer information finns i Använda isbergstabeller med 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>';

Inaktivera kompatibilitetsläge

Om du vill inaktivera kompatibilitetsläget tar du bort motsvarande tabellegenskap:

-- 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' = '')

Varning

Om du avbryter kompatibilitetsläget stoppas omedelbart data- och metadatagenereringen. Efter 7 dagar tas associerade data och metadata bort. Under den här sjudagarsperioden kan du återställa data och metadata genom att återaktivera kompatibilitetsläget i samma tabell.

Begränsningar

  • Skrivskyddad åtkomst: Kompatibilitetsversionen är skrivskyddad. Du kan inte skriva till kompatibilitetsversionen.
  • Inget stöd för RLS/CLS: Du kan inte aktivera kompatibilitetsläge för tabeller med Row-Level Security (RLS) eller Column-Level Security (CLS).
  • Ingen partitionskolumn byter namn: Partitionskolumnbyte stöds inte i tabeller med kompatibilitetsläget aktiverat. Namnbyte för datakolumner stöds.
  • Begränsade tabellfunktioner: Följande funktioner är inte tillgängliga i kompatibilitetsversionen:
    • Sammanställningskolumner
    • Primärnycklar
    • Tidsresa
    • Ändra dataflöde
    • Kolumnnamn med specialtecken (kommer att byta namn)