Condividi tramite


Salto di dati per Delta Lake

Nota

In Databricks Runtime 13.3 e versioni successive Databricks consiglia di usare il clustering liquido per il layout di tabella Delta. Il clustering non è compatibile con l'ordinamento Z. Vedere Usare clustering liquido per le tabelle.

Le informazioni sul data skipping vengono raccolte automaticamente quando si scrivono dati in una tabella Delta. Delta Lake in Azure Databricks sfrutta queste informazioni (valori minimi e massimi, conteggi null e record totali per file) in fase di query per offrire query più veloci.

Dovresti avere statistiche raccolte per le colonne utilizzate nelle ZORDER istruzioni. Vedere Che cos'è l'ordinamento Z?.

Specificare le colonne delle statistiche Delta

Per le tabelle esterne di Unity Catalog, Delta Lake raccoglie le statistiche sulle prime 32 colonne definite nello schema di tabella per impostazione predefinita. Per le tabelle gestite di Unity Catalog, Delta Lake sceglie le statistiche di salto di file in modo intelligente usando l'ottimizzazione predittiva e non ha un limite di 32 colonne. L'ottimizzazione predittiva esegue ANALYZEautomaticamente , un comando per la raccolta di statistiche. Databricks consiglia di abilitare l'ottimizzazione predittiva per tutte le tabelle gestite di Unity Catalog per semplificare la manutenzione dei dati e ridurre i costi di archiviazione. Vedere Ottimizzazione predittiva per le tabelle gestite di Unity Catalog.

Se non si usa l'ottimizzazione predittiva, è possibile modificare il comportamento che limita le raccolte statistiche a 32 colonne impostando una delle proprietà della tabella seguenti:

Proprietà Tabella Databricks Runtime è supportato Descrizione
delta.dataSkippingNumIndexedCols Tutte le versioni supportate di Databricks Runtime Aumentare o diminuire il numero di colonne in cui Delta raccoglie statistiche. Dipende dall'ordine delle colonne.
delta.dataSkippingStatsColumns Databricks Runtime 13.3 LTS e versioni successive Specificare un elenco di nomi di colonna per cui Delta Lake raccoglie le statistiche. "Sostituisce dataSkippingNumIndexedCols."

Le proprietà della tabella possono essere impostate durante la creazione di tabelle o con ALTER TABLE istruzioni . Vedere Informazioni di riferimento sulle proprietà della tabella Delta. Nell'esempio seguente viene eseguito l'override del comportamento predefinito della raccolta di statistiche per impostare la raccolta di statistiche sulle colonne denominate:

ALTER TABLE table_name SET TBLPROPERTIES('delta.dataSkippingStatsColumns' = 'col1, col2, col3')

L'aggiornamento di queste proprietà non ricompila automaticamente le statistiche per i dati esistenti. Influisce invece sul comportamento della raccolta di statistiche future durante l'aggiunta o l'aggiornamento dei dati nella tabella. Delta Lake non sfrutta le statistiche per le colonne non incluse nell'elenco corrente di colonne statistiche.

In Databricks Runtime 14.3 LTS e versioni successive, se sono state modificate le proprietà della tabella o sono state modificate le colonne specificate per le statistiche, è possibile attivare manualmente la ricomputazione delle statistiche per una tabella Delta usando il comando seguente:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Nota

Le stringhe lunghe vengono troncate durante la raccolta di statistiche. È possibile scegliere di escludere colonne stringa lunghe dalla raccolta di statistiche, soprattutto se le colonne non vengono usate di frequente per filtrare le query.

Che cos'è l'ordinamento Z?

Nota

Databricks consiglia di usare il clustering liquido per tutte le nuove tabelle Delta. Non è possibile usare ZORDER in combinazione con il clustering liquido. Vedere Usare clustering liquido per le tabelle.

L'ordinamento Z è una tecnica per la colocazione di informazioni correlate nello stesso set di file. Questa co-località viene utilizzata automaticamente da Delta Lake negli algoritmi di data-skipping di Azure Databricks. Questo comportamento riduce notevolmente la quantità di dati necessari per la lettura di Delta Lake in Azure Databricks. Per ordinare i dati in ordine Z, specificare le colonne da ordinare nella clausola ZORDER BY.

OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)

Se si prevede che una colonna venga comunemente usata nei predicati di query e se tale colonna ha cardinalità elevata , ovvero un numero elevato di valori distinti, usare ZORDER BY.

È possibile specificare più colonne per ZORDER BY come elenco delimitato da virgole. Tuttavia, l'efficacia di questa caratteristica locale diminuisce con ogni colonna aggiuntiva. L'ordinamento Z sulle colonne che non dispongono di statistiche raccolte su di esse sarebbe inefficace e uno spreco di risorse. Ciò è dovuto al fatto che il data skipping richiede statistiche locali della colonna, come minimo, massimo e conteggio. È possibile configurare la raccolta di statistiche per determinate colonne riordinando le colonne nello schema oppure aumentando il numero di colonne per raccogliere statistiche.

Nota

  • L'ordinamento Z non è idempotente , ma mira a essere un'operazione incrementale. Il tempo necessario per l'ordinamento Z non è garantito per ridurre le esecuzioni multiple. Tuttavia, se non sono stati aggiunti nuovi dati a una partizione appena ordinata da Z, un altro ordinamento Z di tale partizione non avrà alcun effetto.

  • L'ordinamento Z mira a produrre file di dati uniformemente bilanciati rispetto al numero di tuple, ma non necessariamente alle dimensioni dei dati su disco. Le due misure sono il più delle volte correlate, ma possono verificarsi situazioni in cui non lo sono, causando uno sfasamento del tempo dell'attività di ottimizzazione.

    Ad esempio, se si ZORDER BYraccoglie dati e i record più recenti sono tutti molto più ampi (ad esempio, matrici o valori stringa più lunghi) rispetto a quelli precedenti, si può prevedere che le durate delle attività del OPTIMIZE processo saranno sbilanciate, così come le dimensioni dei file risultanti. Si tratta, tuttavia, solo di un problema per il OPTIMIZE comando stesso. Non deve avere alcun impatto negativo sulle query successive.