Condividi tramite


Leggere tabelle Delta con client Iceberg

Questo articolo fornisce informazioni dettagliate sull'abilitazione delle letture Iceberg nelle tabelle archiviate con Delta Lake in Azure Databricks. Questa funzionalità richiede Databricks Runtime 14.3 LTS o versione successiva.

Annotazioni

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

È possibile configurare una connessione esterna per fare in modo che Unity Catalog funga da catalogo Iceberg. Vedere Accedere alle tabelle di Azure Databricks dai client Apache Iceberg.

Come funzionano le letture di Apache Iceberg (UniForm)?

Sia Delta Lake che Apache Iceberg sono costituiti da file di dati Parquet e da un livello di metadati. L'abilitazione delle letture di Iceberg configura le tabelle per generare automaticamente metadati Iceberg in modo asincrono, senza riscrivere i dati, in modo che i client Iceberg possano leggere le tabelle Delta scritte da Azure Databricks. Una singola copia dei file di dati serve più formati.

Importante

  • Le tabelle con le letture Iceberg abilitate usano Zstandard anziché Snappy come codec di compressione per i file di dati Parquet sottostanti.
  • La generazione di metadati per Iceberg viene eseguita in modo asincrono sulla macchina utilizzata per scrivere i dati nelle tabelle Delta, il che potrebbe aumentare l'utilizzo delle risorse del driver.
  • Per la documentazione relativa alla funzionalità di tabella UniForm IcebergCompatV1 legacy, vedere Legacy UniForm IcebergCompatV1.

Requisiti

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

Annotazioni

Non è possibile abilitare vettori di eliminazione in una tabella con le letture Iceberg abilitate.

Usare REORG per disabilitare e eliminare i vettori di eliminazione durante l'abilitazione delle letture di Iceberg in una tabella esistente con vettori di eliminazione abilitati. Vedere Abilitare o aggiornare il supporto per la lettura di Iceberg con REORG.

Abilitare le letture di Iceberg (UniForm)

Importante

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

IcebergCompatV2 dipende dalla mappatura delle colonne. Una volta IcebergCompatV2 abilitata per una tabella, non è possibile eliminare la columnMapping funzionalità tabella.

È possibile disattivare le letture di Iceberg annullando l'impostazione della delta.universalFormat.enabledFormats proprietà della tabella. Non è possibile annullare gli aggiornamenti alle versioni del protocollo di lettura e scrittura Delta Lake.

Per abilitare le letture di Iceberg, è necessario impostare le proprietà della tabella 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 sulla tabella usando Iceberg. Vedere Controllare lo stato di generazione dei metadati di Iceberg.

Per un elenco delle limitazioni, vedere Limitazioni.

Abilitare le letture di Iceberg durante la creazione di tabelle

Il mapping delle colonne deve essere abilitato per l'uso delle letture di Iceberg e non può essere eliminato una volta abilitato. Ciò si verifica automaticamente se si abilita la lettura di Iceberg durante la creazione della tabella, come nell'esempio seguente:

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

Abilitare le letture di Iceberg in una tabella esistente

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

ALTER TABLE table_name SET TBLPROPERTIES(
  'delta.columnMapping.mode' = 'name',
  '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:

  • La tua tabella ha abilitati i vettori di eliminazione.
  • In precedenza avevi abilitato la versione IcebergCompatV1 di UniForm Iceberg.
  • È necessario leggere dai motori Iceberg che non supportano file Parquet in stile Hive, ad esempio Athena o Redshift.

Quando si verifica la generazione dei metadati Iceberg?

Azure Databricks attiva la generazione asincrona dei metadati 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.

Annotazioni

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

Per evitare le latenze di scrittura associate alla generazione di metadati, le tabelle Delta con commit frequenti possono raggruppare più commit Delta in un singolo commit nei metadati Iceberg.

Delta Lake garantisce che un solo processo di generazione di metadati sia in corso su una determinata risorsa di calcolo. I commit che attivano un secondo processo di generazione di metadati simultanei eseguono correttamente il commit in Delta, ma non attivano la generazione asincrona di metadati 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 Versioni delle tabelle Delta e Iceberg.

Versioni delle tabelle Delta ed Iceberg

Delta Lake e Iceberg consentono query di spostamento del tempo usando le versioni delle tabelle o i timestamp archiviati nei metadati della tabella.

In generale, le versioni delle tabelle Delta non sono allineate con le versioni di Iceberg né per il timestamp del commit né per l'ID della versione. Per verificare quale versione di una tabella Delta corrisponde a una determinata versione di una tabella Iceberg, è possibile utilizzare le proprietà della tabella corrispondenti. Vedere Controllare lo stato di generazione dei metadati di Iceberg.

Controllare lo stato di generazione dei metadati di Iceberg

L'abilitazione delle letture di Iceberg in una tabella aggiunge i campi seguenti ai metadati della tabella Di Unity Catalog e Iceberg per tenere traccia dello stato di generazione dei metadati:

Il campo metadati Descrizione
converted_delta_version Versione più recente della tabella Delta per la quale sono stati generati correttamente i metadati di Iceberg.
converted_delta_timestamp Timestamp dell'ultimo commit Delta per il quale sono stati generati correttamente i metadati di Iceberg.

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 della tabella con Esplora cataloghi.
  • Uso dell'API REST per ottenere una tabella.

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

SHOW TBLPROPERTIES <table-name>;

Attivare manualmente la conversione dei metadati Iceberg

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

Questa operazione non deve essere necessaria in condizioni normali, ma può essere utile se si verificano le operazioni seguenti:

  • Un cluster termina prima che la generazione automatica dei metadati abbia esito positivo.
  • Un errore o un errore del processo interrompe la generazione dei metadati.
  • Un client che non supporta la generazione di metadati UniForm Iceberg scrive nella tabella Delta.

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

MSCK REPAIR TABLE <table-name> SYNC METADATA

Vedi REPAIR TABLE.

Leggere Iceberg usando un percorso JSON di metadati

Alcuni client Iceberg richiedono di fornire un percorso per i file di metadati versionati per registrare tabelle Iceberg esterne. Ogni volta che Azure Databricks converte una nuova versione della tabella Delta in Iceberg, crea un nuovo file JSON di metadati.

I client che usano i percorsi JSON dei metadati per la configurazione di Iceberg includono BigQuery. Per informazioni dettagliate sulla configurazione, vedere la documentazione relativa al client lettore Iceberg.

Delta Lake archivia i metadati di Iceberg nella directory della tabella 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 della tabella con Esplora cataloghi.
  • Usando 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 su percorso potrebbero richiedere l'aggiornamento manuale e l'aggiornamento dei percorsi JSON dei metadati per leggere le versioni correnti della tabella. Gli utenti potrebbero riscontrare errori durante l'esecuzione di query sulle tabelle Iceberg usando versioni non aggiornate quando i file di dati Parquet vengono rimossi dalla tabella Delta con VACUUM.

Limitazioni

Esistono le limitazioni seguenti per tutte le tabelle con le letture Iceberg abilitate:

  • Le letture di Iceberg non funzionano sulle tabelle con vettori di eliminazione abilitati. Si veda Che cosa sono i vettori di eliminazione?.
  • È necessario accedere alla tabella delta in base al nome (non al percorso) per attivare automaticamente la generazione dei metadati dell'iceberg.
  • Le letture di Iceberg non possono essere abilitate nelle viste materializzate o nelle tabelle di streaming.
  • Le tabelle Delta con letture Iceberg abilitate non supportano tipi 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.
  • I destinatari di Delta Sharing possono leggere la tabella solo come Delta, anche quando le letture di Iceberg sono abilitate.
  • Alcune funzionalità della tabella Delta Lake utilizzate dalle letture di Iceberg non sono supportate da alcuni clienti 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.