Usare il rilevamento delle righe per le tabelle Delta
Il rilevamento delle righe delta Lake consente ad Azure Databricks di tenere traccia della derivazione a livello di riga in una tabella Delta. Questa funzionalità è necessaria per alcuni aggiornamenti incrementali per le viste materializzate.
Importante
Il rilevamento delle righe delta Lake è disponibile in Databricks Runtime 14.1 e versioni successive.
Il rilevamento delle righe è una funzionalità di tabella e usa un protocollo di scrittura di tabelle superiore rispetto ad alcuni client Delta Lake. Non è possibile effettuare il downgrade delle versioni del protocollo di tabella e le tabelle con rilevamento delle righe abilitate non sono scrivibili dai client Delta Lake che non supportano tutte le funzionalità di tabella del protocollo delta writer abilitate. Si veda In che modo Azure Databricks gestisce la compatibilità delle funzionalità di Delta Lake?.
Abilitare il rilevamento delle righe
È necessario abilitare in modo esplicito il rilevamento delle righe impostando la proprietà delta.enableRowTracking = true
table .
Questa operazione può essere eseguita durante la creazione della tabella, come nell'esempio seguente:
CREATE TABLE table_name
TBLPROPERTIES (delta.enableRowTracking = true)
AS SELECT * FROM source_table;
È possibile modificare una tabella esistente per abilitare il rilevamento delle righe, come nell'esempio seguente:
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = true);
Importante
L'abilitazione del rilevamento delle righe nelle tabelle esistenti assegna automaticamente GLI ID riga e le versioni di commit di riga a tutte le righe esistenti nella tabella. Questo processo può comportare la creazione di più nuove versioni della tabella e potrebbe richiedere molto tempo.
La clonazione di una tabella Delta crea una cronologia separata, pertanto gli ID riga e le versioni di commit di riga nelle tabelle clonate non corrispondono a quelli della tabella originale.
Qual è lo schema dei campi dei metadati di rilevamento delle righe?
Il rilevamento delle righe aggiunge due campi di metadati nascosti alla tabella. È possibile aggiungere in modo esplicito questi campi alla query per restituire i valori.
Nome colonna | Type | Valori | Spiegazione |
---|---|---|---|
_metadata.row_id |
Lungo | Identificatore univoco della riga. | Una riga mantiene lo stesso ID ogni volta che viene modificato usando un'istruzione MERGE o UPDATE . |
_metadata.row_commit_version |
Lungo | Versione del log o della tabella Delta in corrispondenza della quale la riga è stata inserita o aggiornata per l'ultima volta. | A una riga viene assegnata una nuova versione ogni volta che viene modificata tramite un'istruzione MERGE o UPDATE . |
Alcune operazioni archiviano questi campi di metadati usando il log delle transazioni. L'esecuzione OPTIMIZE
o REORG
le operazioni in una tabella con il rilevamento delle righe abilitato riscrivono i file di dati per archiviare questi campi.
Disabilitare il rilevamento delle righe
È possibile disabilitare il rilevamento delle righe impostando la proprietà table su false
.
ALTER TABLE table_name SET TBLPROPERTIES (delta.enableRowTracking = false);
Importante
La disabilitazione del rilevamento delle righe non rimuove la funzionalità di tabella corrispondente e non effettua il downgrade della versione del protocollo di tabella. Non rimuove anche i campi dei metadati dalla tabella di destinazione.
Con il rilevamento delle righe disabilitato, gli ID di riga generati non sono più affidabili per tenere traccia di righe univoche.
Limiti
Non è possibile accedere agli ID di riga e ai campi dei metadati delle versioni del commit di riga durante la lettura del feed di dati delle modifiche. Vedere Usare il feed di dati delle modifiche delta Lake in Azure Databricks.