Condividi tramite


Leggere Delta tables con i client Iceberg

Questo articolo fornisce dettagli sull'abilitazione delle letture di Iceberg sui dati tables archiviati con Delta Lake in Azure Databricks. Questa funzionalità richiede Databricks Runtime 14.3 LTS o versione successiva.

Nota

Questa funzionalità era precedentemente denominata Delta Lake Universal Format (UniForm).

È possibile configurare una connessione esterna in modo che Unity Catalog agisca come Iceberg catalog. Consulta Read Databricks tables da client Iceberg.

Come funzionano le letture di dati di Iceberg (UniForm)

Sia Delta Lake che Iceberg sono costituiti da file di dati Parquet e da un livello di metadati. Abilitando le letture di Iceberg, si configura il tables in modo da generate automaticamente i metadati di Iceberg in modo asincrono, senza riscrivere i dati, affinché i client Iceberg possano leggere Delta tables scritti da Azure Databricks. Una singola copia dei file di dati serve più formati.

Importante

  • Tables, abilitando le letture Iceberg, utilizza Zstandard invece di Snappy come codec di compressione per i file di dati Parquet sottostanti.
  • La generazione di metadati iceberg viene eseguita in modo asincrono nel calcolo usato per scrivere dati in Delta tables, che potrebbe aumentare l'utilizzo delle risorse del driver.
  • Per la documentazione relativa alla funzionalità legacy di IcebergCompatV1table UniForm, vedere Legacy UniForm IcebergCompatV1.

Requisiti

Per abilitare le letture di Iceberg, è necessario soddisfare i requisiti seguenti:

Nota

Non è possibile abilitare i vettori di eliminazione su un table con le funzionalità Iceberg abilitate.

Utilizzare REORG per disabilitare e purgare i vettori di cancellazione mentre si abilitano le letture Iceberg su un table esistente con vettori di cancellazione abilitati. Consulta per abilitare o aggiornare il supporto di lettura Iceberg con il REORG.

Abilitare le letture di Iceberg (UniForm)

Importante

Quando si abilitano le letture di Iceberg, la funzionalità del protocollo di scrittura IcebergCompatV2 viene aggiunta al table. Solo i client che supportano questa funzionalità di table possono scrivere su tables con le letture Iceberg abilitate. In Azure Databricks è necessario usare Databricks Runtime 14.3 LTS o versione successiva per scrivere per abilitare tables.

È possibile disattivare le letture di Iceberg deselezionando la proprietà delta.universalFormat.enabledFormatstable. Non è possibile annullare gli aggiornamenti alle versioni del protocollo di lettura e scrittura Delta Lake.

Per abilitare le letture di Iceberg, è necessario set le proprietà table seguenti:

'delta.enableIcebergCompatV2' = 'true'
'delta.universalFormat.enabledFormats' = 'iceberg'

Quando si abilitano le letture di Iceberg per la prima volta, inizia la generazione di metadati asincroni. Questa attività deve essere completata prima che i client esterni possano eseguire query sul table usando Iceberg. Si veda Controllare lo stato di generazione dei metadati di Iceberg.

Per un list di limitazioni, vedere Limitazioni .

Abilitare le letture tramite Iceberg durante la creazione di table

Column mapping deve essere abilitato per utilizzare le letture Iceberg. Ciò si verifica automaticamente se si abilitano le letture di Iceberg durante la creazione di table, come nell'esempio seguente:

CREATE TABLE T(c1 INT) TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Abilitare la funzionalità di lettura di Iceberg su un table esistente

In Databricks Runtime 15.4 LTS e versioni successive è possibile abilitare o aggiornare le letture di Iceberg in un table esistente usando la sintassi seguente:

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.enableIcebergCompatV2' = 'true',
  'delta.universalFormat.enabledFormats' = 'iceberg');

Abilitare o aggiornare il supporto per la lettura di Iceberg tramite REORG

È possibile usare REORG per abilitare le letture di Iceberg e riscrivere i file di dati sottostanti, come nell'esempio seguente:

REORG TABLE table_name APPLY (UPGRADE UNIFORM(ICEBERG_COMPAT_VERSION=2));

Usare REORG se una delle condizioni seguenti è vera:

  • Il table ha vettori di eliminazione abilitati.
  • In precedenza è stata abilitata la versione IcebergCompatV1 di UniForm Iceberg.
  • È necessario leggere dai motori Iceberg che non supportano file Parquet in stile Hive, ad esempio Apache o Redshift.

Quando si verifica la generazione dei metadati Iceberg?

Azure Databricks attiva la generazione di metadati in modo asincrono dopo il completamento di una transazione di scrittura Delta Lake. Questo processo di generazione dei metadati usa lo stesso calcolo che ha completato la transazione Delta.

Nota

È anche possibile attivare manualmente la generazione di metadati Iceberg. Si veda Attivare manualmente la conversione dei metadati di Iceberg.

Per evitare latenze di scrittura associate alla generazione di metadati, Delta tables con commit frequenti può raggruppare più commit Delta in un singolo commit nei metadati di Iceberg.

Delta Lake garantisce che un solo processo di generazione di metadati sia in corso su una determinata risorsa di calcolo. I commit che avvierebbero un secondo processo di generazione simultanea di metadati eseguono correttamente il commit su Delta, ma non avviano la generazione asincrona dei metadati di Iceberg. In questo modo si evita la latenza a catena per la generazione di metadati per i carichi di lavoro con commit frequenti (da secondi a minuti tra i commit).

Vedere le versioni Delta e table Iceberg.

versioni Delta ed Iceberg table

Delta Lake e Iceberg consentono query di viaggio nel tempo utilizzando versioni table o timestamp archiviati nei metadati table.

In generale, le versioni Delta table non sono allineate con le versioni di Iceberg né per il timestamp di commit né per l'ID versione. Per verificare a quale versione di un Iceberg table corrisponde una determinata versione di un Delta table, è possibile usare le proprietà table corrispondenti. Si veda Controllare lo stato di generazione dei metadati di Iceberg.

Controllare lo stato di generazione dei metadati di Iceberg

L'abilitazione delle letture di Iceberg su un table aggiunge i seguenti campi ai metadati di Unity Catalog e di Iceberg table per monitorare lo stato di generazione dei metadati.

Campo dei metadati Descrizione
converted_delta_version L'ultima versione del Delta table per cui i metadati di Iceberg sono stati generati con successo.
converted_delta_timestamp Il timestamp dell'ultimo commit Delta per il quale i metadati Iceberg sono stati generati con successo.

In Azure Databricks è possibile esaminare questi campi di metadati eseguendo una delle operazioni seguenti:

  • Revisione della sezione Delta Uniform Iceberg restituita da DESCRIBE EXTENDED table_name.
  • Revisione dei metadati di table con Esplora Catalog.
  • Uso dell'API REST per get un table.

Per informazioni su come esaminare le proprietà di table all'esterno di Azure Databricks, vedere la documentazione per il client lettore Iceberg. Per OSS Apache Spark, è possibile visualizzare queste proprietà usando la seguente sintassi:

SHOW TBLPROPERTIES <table-name>;

Attivare manualmente la conversione dei metadati di Iceberg

È possibile attivare manualmente la generazione dei metadati Iceberg per la versione più recente di Delta table. Questa operazione viene eseguita in modo sincrono, ovvero quando viene completata, il contenuto table disponibile in Iceberg riflette la versione più recente del delta table disponibile all'avvio del processo di conversione.

Questa operazione non dovrebbe essere necessaria in condizioni normali, ma può essere utile se si verificano i seguenti casi:

  • Un cluster termina prima che la generazione automatica dei metadati sia completata correttamente.
  • Un errore o un errore del processo interrompe la generazione dei metadati.
  • Un client che non supporta la generazione di metadati UniForm Iceberg scrive nel Delta table.

Usare la sintassi seguente per attivare manualmente la generazione di metadati Iceberg:

MSCK REPAIR TABLE <table-name> SYNC METADATA

Vedere REPAIR TABLE.

Leggere Iceberg usando un percorso JSON di metadati

Alcuni clienti del sistema Iceberg richiedono di fornire un percorso ai file di metadati versione per registrare l'Iceberg esterno tables. Ogni volta che Azure Databricks converte una nuova versione del delta table in Iceberg, crea un nuovo file JSON di metadati.

I client che utilizzano i percorsi JSON dei metadati per configurare Iceberg includono BigQuery. Per informazioni dettagliate sulla configurazione, si veda la documentazione relativa al client di lettura Iceberg.

Delta Lake archivia i metadati di Iceberg nella directory table usando il modello seguente:

<table-path>/metadata/<version-number>-<uuid>.metadata.json

In Azure Databricks è possibile esaminare questa posizione dei metadati eseguendo una delle operazioni seguenti:

  • Revisione della sezione Delta Uniform Iceberg restituita da DESCRIBE EXTENDED table_name.
  • Revisione dei metadati di table con Esplora Catalog.
  • Usare il comando seguente con l'API REST:
GET api/2.1/unity-catalog/tables/<catalog-name>.<schame-name>.<table-name>

La risposta include le informazioni seguenti:

{
    ...
          "delta_uniform_iceberg": {
              "metadata_location":  "<cloud-storage-uri>/metadata/v<version-number>-<uuid>.metadata.json"
    }
}

Importante

I client di lettura Iceberg basati sul percorso potrebbero richiedere l'aggiornamento manuale e il refresh dei percorsi JSON dei metadati per leggere le versioni correnti di table. Gli utenti potrebbero riscontrare errori durante l'esecuzione di query su Iceberg tables se utilizzano versioni non aggiornate, poiché i file di dati Parquet vengono rimossi dalla Delta table con VACUUM.

Limiti

Esistono le limitazioni seguenti per tutte le tables con le letture di Iceberg abilitate:

  • Le letture di Iceberg non funzionano su tables con vettori di eliminazione abilitati. Si veda Che cosa sono i vettori di eliminazione?.
  • Delta tables con letture Iceberg abilitate non supportano tipi di VOID.
  • Il supporto client di Iceberg è di sola lettura. Le operazioni di scrittura non sono supportate.
  • I lettori Iceberg potrebbero avere limitazioni individuali, indipendentemente dal supporto di Azure Databricks per le letture Iceberg. Consultare la documentazione per il cliente scelto.
  • Il recipients di Delta Sharing può interpretare solo il table come Delta, anche se le letture di Iceberg sono abilitate.
  • Alcune funzionalità di Delta Lake table utilizzate dalle funzioni di lettura di Iceberg non sono supportate da alcuni client lettori di Delta Sharing. Si veda Che cos'è Delta Sharing?.

Il feed di dati delle modifiche funziona per i client Delta quando le letture di Iceberg sono abilitate, ma non ha supporto su Iceberg.