Compartir vía


OPTIMIZE

Se aplica a:marcado como sí Databricks SQL marcado como sí Databricks Runtime

En esta página se describe el OPTIMIZE comando , que optimiza el diseño de los datos de Delta Lake. Puede optimizar un subconjunto de datos o colocar datos por columna. Si no especifica la intercalación y la tabla no usa la agrupación en clústeres líquidos, Delta Lake realiza la optimización del empaquetado de contenedores.

Sintaxis

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

Nota:

La optimización de empaquetado bin es idempotente: si la ejecuta dos veces en el mismo conjunto de datos, la segunda ejecución no tiene ningún efecto. Genera archivos de datos uniformemente equilibrados con respecto a su tamaño en el disco, pero no necesariamente el número de tuplas por archivo. Las dos medidas se correlacionan con más frecuencia.

Z-Ordering no es idempotente, pero funciona incrementalmente. No se garantiza que el tiempo que tarda Z-Ordering disminuya en varias ejecuciones. Sin embargo, si no se agregaron nuevos datos a una partición que era simplemente Z-Ordering, la ejecución de Z-Ordering de nuevo en esa partición no tiene ningún efecto. El orden Z genera archivos de datos uniformemente equilibrados con respecto al número de tuplas, pero no necesariamente el tamaño de los datos en el disco. Las dos medidas se correlacionan con más frecuencia, pero la asimetría en los tiempos de tarea de optimización puede producirse cuando difieren.

Nota:

Al usar Databricks Runtime, para controlar el tamaño del archivo de salida, establezca la configuraciónspark.databricks.delta.optimize.maxFileSize de Spark. El valor predeterminado es 1073741824 (1 GB). Especificar 104857600 establece el tamaño del archivo en 100 MB.

Parámetros

  • table_name

    Identifica una tabla de Delta existente. El nombre no debe incluir una especificación temporal ni una especificación de opciones.

  • FULL

    Se aplica a: compruebe que sí Databricks Runtime 16.0 y versiones posteriores

    Vuelve a escribir todos los archivos de datos de la tabla. Use OPTIMIZE table_name FULL para:

    Para volver a comprimir los datos existentes después de cambiar el códec de compresión, ejecute 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;
    

    Para optimizar un subconjunto de archivos de una tabla con la agrupación en clústeres líquidos habilitada, combine FULL con un WHERE predicado (Databricks Runtime 18.1 y versiones posteriores). Solo se admiten predicados de intervalo simple en una sola columna de agrupación en clústeres. Se incluye un archivo si alguna parte de su intervalo se superpone con el predicado. Por ejemplo, OPTIMIZE events FULL WHERE date > 15 incluye un archivo con intervalo (col_min = 10, col_max = 20) porque el intervalo del archivo se superpone con el predicado.

  • WHERE

    Optimiza el subconjunto de filas que coinciden con un predicado de partición o agrupación en clústeres. Solo se admiten filtros en atributos clave de partición o agrupación en clústeres.

    En el caso de las tablas que usan clústeres líquidos, use OPTIMIZE table_name FULL WHERE predicate (Databricks Runtime 18.1 y versiones posteriores) en su lugar.

  • ZORDER BY

    Nota:

    Databricks recomienda la agrupación en clústeres líquidos para todas las tablas nuevas en lugar de ordenar Z. Consulte Uso de clústeres líquidos para tablas.

    Coloca la información de columna en el mismo conjunto de archivos. Los algoritmos de omisión de datos de Delta Lake usan la colocalización para reducir la cantidad de datos que se deben leer. Puede especificar varias columnas como una lista separada por comas, pero la eficacia de la colocalización disminuye con cada columna adicional.

    No puede usar esta cláusula en tablas que usan clústeres líquidos.

Ejemplos

> 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);

Para obtener más información, consulte Optimización del diseño del archivo de datos.