Tabelle gestite del catalogo Unity per Delta Lake e Apache Iceberg

Le tabelle gestite di Unity Catalog sono il tipo di tabella predefinito e consigliato in Azure Databricks per Delta Lake e Apache Iceberg. Unity Catalog gestisce tutte le responsabilità di lettura, scrittura, archiviazione e ottimizzazione. Vedere Convertire tabelle Delta Lake esterne o esterne in tabelle gestite del catalogo Unity.

I file di dati per le tabelle gestite vengono archiviati nello schema o nel catalogo che li contiene. Consultare Specificare una posizione di archiviazione gestita in Unity Catalog.

Rispetto alle tabelle esterne ed estere , le tabelle gestite costano meno da archiviare e interrogare, mantenendosi e ottimizzandosi automaticamente e rimangono accessibili ai client esterni tramite API aperte.

È possibile usare tabelle gestite in tutti i linguaggi e i prodotti supportati in Azure Databricks. Sono necessari determinati privilegi per creare, aggiornare, eliminare o eseguire query su tabelle gestite. Consulta Gestione dei privilegi in Unity Catalog.

Note

Questa pagina descrive solo le tabelle gestite del catalogo Unity. Per le tabelle gestite nel metastore Hive legacy, vedere Oggetti di database nel metastore Hive legacy.

Vantaggi delle tabelle gestite di Unity Catalog

Le tabelle gestite di Unity Catalog ottimizzano i costi di archiviazione e le velocità delle query e consentono l'interoperabilità con strumenti di terze parti per Delta Lake e Apache Iceberg. Per semplificare la gestione e le prestazioni dei dati, queste tabelle gestite usano tecnologie basate su intelligenza artificiale, ad esempio la compattazione delle dimensioni dei file e la raccolta intelligente delle statistiche.

Le tabelle gestite supportano l'interoperabilità consentendo l'accesso dai client Delta Lake e Apache Iceberg. Vedere Accedere ai dati di Databricks usando sistemi esterni.

Le funzionalità seguenti sono esclusive delle tabelle gestite di Unity Catalog e non sono disponibili per le tabelle esterne e le tabelle federate:

Feature Benefits Configuration
Catalogo dei commit Consente transazioni multi-statement tra tabelle, pianificazione più rapida delle query, modifiche di schema e vincoli applicabili, e scritture sicure da motori esterni. Disattivato per impostazione predefinita. Per attivare, impostare la delta.feature.catalogManaged proprietà table. Vedi Abilita i commit del catalogo.
Ottimizzazione predittiva Ottimizza automaticamente la disposizione e il calcolo dei dati tramite l'IA, senza operazioni di manutenzione manuale. Databricks consiglia di abilitare l'ottimizzazione predittiva per tutte le tabelle gestite per ridurre i costi di archiviazione e calcolo. Abilitato di default per gli account creati a partire dall'11 novembre 2024. Azure Databricks lo sta gradualmente abilitando per gli account esistenti. Per configurare, vedere Abilitare l'ottimizzazione predittiva.
Transazioni con più istruzioni Esegui più istruzioni SQL su una o più tabelle come un'unica transazione atomica con garanzie ACID. Tutte le modifiche riescono positivamente oppure sono annullate insieme. Da utilizzare per stored procedure e SQL scripting. Disattivato per impostazione predefinita. Per scegliere una modalità di transazione, vedi Modalità transazione.
Le operazioni di scrittura nelle tabelle Apache Iceberg gestite sono in Anteprima privata.
Clustering liquido automatico Per le tabelle con ottimizzazione predittiva, seleziona e aggiorna automaticamente le chiavi di clustering man mano che cambiano i modelli di query per migliorare le prestazioni e ridurre i costi. Disattivato per impostazione predefinita. Per configurare, vedere Abilitare il clustering liquido.
Memorizzazione nella cache dei metadati La cache in memoria dei metadati delle transazioni migliora le prestazioni delle query minimizzando le richieste al log delle transazioni memorizzate nel cloud. Abilitata per impostazione predefinita. Non configurabile.
Indici di ricerca full-text Accelera le ricerche di sottostringhe e parole chiave nelle colonne di testo utilizzando le funzioni search e isearch. Azure Databricks salta i file che non possono contenere righe corrispondenti, riducendo la quantità di dati scansionati. Disattivato per impostazione predefinita. Crea con CREATE SEARCH INDEX.
In Beta. Richiede Databricks Runtime 18.2 o versioni successive.
Eliminazione automatica dei file dopo un DROP TABLE comando Quando si elimina una tabella gestita, Azure Databricks elimina i file di dati nell'archiviazione cloud dopo la scadenza del periodo di recupero (predefinito 7 giorni), riducendo i costi di archiviazione. Per le tabelle esterne, è necessario eliminare manualmente i file dal bucket di archiviazione. Abilitata per impostazione predefinita. È possibile configurare il periodo di ripristino a livello di catalogo o schema. Vedere Eliminare una tabella gestita.

Accedere ai dati di Databricks usando sistemi esterni

Le tabelle gestite supportano l'interoperabilità consentendo l'accesso dai client Delta Lake e Apache Iceberg.

Tramite API aperte e distributori di credenziali, Il catalogo unity consente motori esterni come Trino, DuckDB, Apache Spark, Daft e motori integrati nel catalogo REST Iceberg, ad esempio Dremio, per accedere alle tabelle gestite. Per i client esterni che non supportano LE API aperte, è possibile usare la modalità compatibilità per leggere le tabelle gestite usando qualsiasi client Delta Lake o Apache Iceberg. OpenSharing, un protocollo open source, consente la condivisione sicura e regolamentata dei dati con partner e piattaforme esterni.

Vedere integrazioni per un elenco di motori esterni supportati o controllare la documentazione del motore se non è inclusa in questo elenco.

Le API aperte seguenti consentono ai sistemi esterni di accedere alle tabelle gestite di Unity Catalog:

  • L'API REST di Unity ha accesso in lettura, scrittura e creazione per i client Delta Lake alle tabelle Delta Lake gestite.
  • Iceberg REST Catalog (IRC) ha letto, scritto e creato accesso per i client Apache Iceberg alle tabelle Apache Iceberg gestite e all'accesso in sola lettura alle tabelle Delta Lake con le letture Apache Iceberg attivate.

Entrambe le API supportano la distribuzione automatica delle credenziali, che fornisce credenziali temporanee con ambito che ereditano i privilegi del principale di Azure Databricks che effettua la richiesta, mantenendo i controlli di governance e sicurezza.

OpenSharing è un protocollo open source che consente l'accesso sicuro e regolamentato ai dati a partner e piattaforme esterni. È possibile usare OpenSharing per concedere ai partner l'accesso temporaneo in sola lettura.

Tutte le letture e le scritture nelle tabelle gestite devono usare nomi di tabella e nomi di catalogo e schemi in cui esistono. Ad esempio: catalog_name.schema_name.table_name. L'accesso basato sul percorso alle tabelle gestite del catalogo Unity non è supportato (tranne in modalità compatibilità) perché ignora i controlli di accesso al catalogo Unity e impedisce il corretto funzionamento delle funzionalità della tabella gestita.

Creare una tabella gestita

Per creare una tabella gestita, è necessario disporre di:

  • USE SCHEMA nello schema padre della tabella.
  • USE CATALOG nel catalogo principale della tabella dati.
  • CREATE TABLE nello schema padre della tabella.

Usare la sintassi seguente per creare una tabella gestita vuota. Sostituisci i valori segnaposto:

  • <catalog-name>: nome del catalogo che conterrà la tabella.
  • <schema-name>: nome dello schema contenente la tabella.
  • <table-name>: nome della tabella.
  • <column-specification>: nome e tipo di dati di ogni colonna.

SQL

-- Create a managed Delta table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
);

-- Create a managed Iceberg table
CREATE TABLE <catalog-name>.<schema-name>.<table-name>
(
  <column-specification>
)
USING iceberg;

Python

Creare una tabella Delta Lake gestita usando saveAsTable():

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

In alternativa, usare l'API DeltaTableBuilder per opzioni specifiche di Delta, ad esempio colonne generate e proprietà della tabella:

from delta.tables import DeltaTable

DeltaTable.create(spark) \
  .tableName("<catalog-name>.<schema-name>.<table-name>") \
  .addColumn("<column-name>", "<data-type>") \
  .property("<key>", "<value>") \
  .execute()

Creare una tabella Apache Iceberg gestita:

from pyspark.sql.types import StructType, StructField, StringType

schema = StructType([StructField("<column-name>", StringType())])

spark.createDataFrame([], schema).write \
  .format("iceberg") \
  .saveAsTable("<catalog-name>.<schema-name>.<table-name>")

Per mantenere le prestazioni nelle operazioni di lettura e scrittura, Azure Databricks esegue periodicamente operazioni per ottimizzare i metadati della tabella Apache Iceberg gestita. Questa attività viene eseguita usando l’elaborazione serverless, che dispone delle autorizzazioni MODIFY per la tabella Apache Iceberg. Questa operazione scrive solo nei metadati della tabella e il sistema di calcolo mantiene solo le autorizzazioni per la tabella per la durata del processo.

Note

Per creare una tabella Apache Iceberg, specificare USING icebergin modo esplicito . In caso contrario, Azure Databricks crea una tabella Delta Lake per impostazione predefinita.

È possibile creare tabelle gestite dai risultati delle query o dalle operazioni di scrittura del dataframe. Gli articoli seguenti illustrano alcuni dei numerosi modelli che è possibile usare per creare una tabella gestita in Azure Databricks:

Per creare una copia di una tabella gestita esistente, usare clone. Le tabelle Delta Lake gestite supportano la clonazione profonda e superficiale. Le tabelle Apache Iceberg gestite supportano solo la clonazione completa. Vedi Clonare una tabella in Azure Databricks e Clonare una tabella Iceberg gestita.

Eliminare una tabella gestita

Per eliminare una tabella gestita, è necessario disporre di:

  • MANAGE nella tabella oppure devi essere il proprietario della tabella.
  • USE SCHEMA nello schema padre della tabella.
  • USE CATALOG nel catalogo principale della tabella dati.

Per eliminare una tabella gestita, eseguire il comando seguente:

SQL

DROP TABLE IF EXISTS catalog_name.schema_name.table_name;

Python

spark.sql("DROP TABLE IF EXISTS catalog_name.schema_name.table_name")

In alternativa, in Databricks Runtime 18.2 e versioni successive usare spark.catalog.dropTable():

spark.catalog.dropTable("catalog_name.schema_name.table_name", ifExists=True)

Unity Catalog supporta il UNDROP TABLE comando per ripristinare tabelle gestite eliminate accidentalmente. Per impostazione predefinita, le tabelle sono recuperabili per 7 giorni dopo l'eliminazione. Al termine del periodo di ripristino, Azure Databricks elimina i file di dati sottostanti dal tenant cloud entro 48 ore.

Configurare il periodo di ripristino

Importante

Il periodo di recupero configurabile è disponibile in anteprima pubblica.

È possibile configurare per quanto tempo le tabelle gestite eliminate rimangono recuperabili a livello di catalogo o schema. Se i periodi di ripristino vengono impostati a entrambi i livelli, l'impostazione a livello di schema ha la precedenza per le tabelle in tale schema.

Per configurare il periodo di ripristino, è necessario avere MANAGE privilegi o proprietà nel catalogo o nello schema. Questa impostazione si applica solo alle tabelle eliminate dopo la configurazione. Non influisce sulle tabelle già eliminate.

Il periodo di recupero può essere di 0 ore, il che disabilita il recupero, oppure da 7 a 30 giorni. Un periodo più lungo protegge da cadute accidentali di dati critici, mentre un periodo più breve elimina i dati caduti più rapidamente per risparmiare i costi di archiviazione nelle pipeline ETL che spesso creano e rilasciano tabelle. Quando impostato a 0, le tabelle eliminate non possono essere recuperate con UNDROP. Azure Databricks elimina i file di dati dall'archiviazione nel cloud entro 48 ore dall'eliminazione.

Per impostare il periodo di recupero, usare ALTER CATALOG o ALTER SCHEMA con la RETAIN DROPPED TO clausola :

SQL

-- Set a 30-day recovery period on a catalog
ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS;

-- Set a 7-day recovery period on a schema (overrides the catalog setting)
ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS;

Python

spark.sql("ALTER CATALOG my_catalog RETAIN DROPPED TO 30 DAYS")
spark.sql("ALTER SCHEMA my_catalog.my_schema RETAIN DROPPED TO 7 DAYS")

È anche possibile impostare il periodo di recupero quando si crea un catalogo o uno schema con la RETAIN DROPPED FOR clausola :

SQL

CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS;
CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS;

Python

spark.sql("CREATE CATALOG my_catalog RETAIN DROPPED FOR 30 DAYS")
spark.sql("CREATE SCHEMA my_catalog.my_schema RETAIN DROPPED FOR 7 DAYS")

Per controllare il periodo di recupero corrente, eseguire DESCRIBE EXTENDED. L'output include una Recovery Period Hours riga:

SQL

DESCRIBE CATALOG EXTENDED my_catalog;
DESCRIBE SCHEMA EXTENDED my_catalog.my_schema;

Python

spark.sql("DESCRIBE CATALOG EXTENDED my_catalog").show()
spark.sql("DESCRIBE SCHEMA EXTENDED my_catalog.my_schema").show()