Condividi tramite


OPTIMIZE

Si applica a:segno di spunta sì Databricks SQL segno di spunta sì Databricks Runtime

Questa pagina descrive il OPTIMIZE comando , che ottimizza il layout dei dati Delta Lake. È possibile ottimizzare un subset di dati o posizionare i dati per colonna. Se non si specifica la collocazione e la tabella non usa clustering liquido, Delta Lake esegue l'ottimizzazione della compressione bin.

Sintassi

OPTIMIZE table_name [FULL] [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Nota

L'ottimizzazione della compressione bin è idempotente: se la si esegue due volte nello stesso set di dati, la seconda esecuzione non ha alcun effetto. Produce file di dati con bilanciamento uniforme rispetto alle dimensioni del disco, ma non necessariamente il numero di tuple per ogni file. Le due misure sono più spesso correlate.

L'ordinamento Z non è idempotente, ma funziona in modo incrementale. Il tempo impiegato dall'ordinamento Z non è garantito per diminuire su più esecuzioni. Tuttavia, se non sono stati aggiunti nuovi dati a una partizione appena Z-Ordered, l'esecuzione di nuovo Z-Ordering su tale partizione non ha alcun effetto. L'ordinamento Z produce file di dati con bilanciamento uniforme rispetto al numero di tuple, ma non necessariamente alle dimensioni dei dati su disco. Le due misure sono più spesso correlate, ma l'asimmetria nei tempi di ottimizzazione delle attività può verificarsi quando divergono.

Nota

Quando si usa Databricks Runtime, per controllare le dimensioni del file di output, impostare la configurazione spark.databricks.delta.optimize.maxFileSizedi Spark. Il valore predefinito è 1073741824 (1 GB). Se si specifica, le dimensioni del file vengono impostate 104857600 su 100 MB.

Parametri

  • table_name

    Identifica una tabella Delta esistente. Il nome non deve includere una specifica temporale o una specifica delle opzioni.

  • FULL

    Si applica a: selezionare sì Databricks Runtime 16.0 e versioni successive

    Riscrive tutti i file di dati nella tabella. Usare OPTIMIZE table_name FULL per:

    • Ottimizzare l'intera tabella, inclusi i dati precedentemente raggruppati (per le tabelle che usano clustering liquido).
    • Ricomprimere i file di dati esistenti quando si modifica il codec di compressione della tabella usando la delta.parquet.compression.codec proprietà .

    Per ricomprimere i dati esistenti dopo aver modificato il codec di compressione, eseguire OPTIMIZE table_name FULL:

    -- Change compression codec
    ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');
    
    -- Recompress all existing data files
    OPTIMIZE table_name FULL;
    

    Per ottimizzare un subset di file in una tabella con clustering liquido abilitato, combinare FULL con un WHERE predicato (Databricks Runtime 18.1 e versioni successive). Sono supportati solo predicati di intervallo semplici in una singola colonna di clustering. Un file viene incluso se una parte del relativo intervallo si sovrappone al predicato. Ad esempio, OPTIMIZE events FULL WHERE date > 15 include un file con intervallo (col_min = 10, col_max = 20) perché l'intervallo del file si sovrappone al predicato.

  • WHERE

    Ottimizza il subset di righe corrispondenti a un predicato di partizione/clustering. Sono supportati solo i filtri per gli attributi della chiave di partizione/clustering.

    Per le tabelle che usano il clustering liquido, usare OPTIMIZE table_name FULL WHERE predicate invece (Databricks Runtime 18.1 e versioni successive).

  • ZORDER BY

    Colloca le informazioni sulle colonne nello stesso set di file. Gli algoritmi di data-skipping di Delta Lake usano la co-località per ridurre la quantità di dati che devono essere letti. È possibile specificare più colonne come elenco delimitato da virgole, ma l'efficacia della co-località diminuisce con ogni colonna aggiuntiva.

    Non è possibile usare questa clausola nelle tabelle che usano clustering liquido.

Esempi

> OPTIMIZE events;

> OPTIMIZE events FULL;

> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';

> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';

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

Per altre informazioni, vedere Ottimizzare il layout dei file di dati.