Ordine Z per le tabelle Delta

Z-Order è una tecnica di layout dei dati che coloca i dati correlati negli stessi file applicando una curva di riempimento dello spazio Z-Order (Morton) su una o più colonne. La tecnica restringe gli intervalli min/max archiviati nelle statistiche a livello di file, il che migliora l'esclusione dei file quando le query filtrano su tali colonne.

Tip

Per la maggior parte dei carichi di lavoro a partire da Fabric Runtime 2.0, liquid clustering è la strategia consigliata per il layout dei dati. Consente una selezione flessibile delle colonne, l'ottimizzazione incrementale e nessuna penalizzazione dovuta ai file di piccole dimensioni, anche con colonne ad alta cardinalità. Usare Z-Order solo quando si dispone di un flusso di lavoro stabilito in un runtime precedente o non è necessaria la flessibilità del clustering liquido.

Per indicazioni complete sul clustering liquido, vedere Clustering liquido.

Quando usare Z-Order

Usare l'ordine Z quando:

  • Si usa Fabric Runtime 1.2 o versioni precedenti, in cui il clustering liquido non è disponibile o ha un supporto limitato.
  • È stato stabilito un flusso di lavoro dell'ordine Z e non è necessario modificare frequentemente le colonne.
  • Vuoi saltare file multicolonna senza introdurre il partizionamento.

Applica l'ordine Z

L'ordine Z viene applicato come parte del OPTIMIZE comando. A differenza del clustering liquido, si specificano le colonne direttamente nell'istruzione OPTIMIZE ogni volta che viene eseguita, ovvero le colonne non vengono archiviate nei metadati della tabella.

OPTIMIZE sales ZORDER BY (order_date, region)

Tip

A partire da Fabric Runtime 2.0, il motore di esecuzione nativo supporta l'esecuzione di OPTIMIZE con ZORDER specificata, offrendo prestazioni di clustering multidimensionale superiori del 30-50%. I runtime precedenti ripiegano su un'esecuzione Spark regolare non accelerata.

Ambito Z-Order con un predicato WHERE

È possibile aggiungere una WHERE clausola per limitare i file OPTIMIZE ZORDER BY riscritti. Solo i file contenenti righe che corrispondono al predicato sono candidati per la compattazione e il layout dell'ordine Z. La clausola WHERE è utile per la manutenzione incrementale, ad esempio applicando lo Z-Ordering solo ai dati più recenti dopo un'esecuzione di acquisizione dei dati.

-- Z-Order only files that contain data from the last 7 days
OPTIMIZE sales
WHERE order_date >= current_date() - INTERVAL 7 DAYS
ZORDER BY (order_date, region)

L'uso di un WHERE predicato riduce la quantità di dati riscritti, riducendo i costi di calcolo e il tempo di esecuzione. Il predicato filtra in base alle statistiche a livello di file, quindi funziona meglio sulle colonne che dispongono già di intervalli min/max stretti per ogni file (ad esempio, una colonna di data scritta in ordine cronologico).

Ordine Z con partizionamento

L'ordine Z e il partizionamento possono essere combinati. Quando vengono usati entrambi, OPTIMIZE ZORDER BY applica il layout Z-Order all'interno di ogni partizione in modo indipendente. La combinazione è utile quando è necessario il partizionamento per l'isolamento degli scrittori concorrenti e lo Z-Order per saltare i file in base ad altre colonne.

-- Table is partitioned by region; Z-Order by order_date within each partition
OPTIMIZE sales ZORDER BY (order_date)

Considerazioni principali

  • Le colonne Z Order non vengono archiviate nei metadati della tabella. È necessario specificarli ogni volta che si esegue OPTIMIZE.
  • Z-Order riscrive tutti i file idonei a ogni esecuzione di OPTIMIZE, a meno che non si specifichi un predicato WHERE per limitare il campo di applicazione. Non esiste alcuna modalità incrementale, ad esempio il clustering liquido.
  • L'ordine Z e il clustering liquido non sono compatibili nella stessa tabella. Usare uno o l'altro.
  • Per ottenere risultati ottimali, scegliere da 1 a 4 colonne che vengono visualizzate di frequente nelle WHERE clausole.

Confronta Z-Order e il clustering liquido

Aspect Ordine Z Raggruppamento liquido
Modifiche alle colonne Deve rispecificare su ogni OPTIMIZE ALTER TABLE CLUSTER BY mantiene la definizione
Modalità incrementale No. Riscrittura completa a ogni esecuzione Sì (Runtime 2.0+)
Archiviazione a colonne Non persistente nei metadati Archiviato nei metadati della tabella
Algoritmo delle curve Curva dell'ordine Z Z-Order (una colonna), Hilbert (2+ colonne)
Requisito di runtime Tutti gli ambienti di runtime Runtime 1.2+ (incrementale dalla 2.0 in poi)