Optimización del diseño del archivo de datos
La optimización predictiva ejecuta automáticamente OPTIMIZE
en tablas administradas de Unity Catalog. Databricks recomienda habilitar la optimización predictiva para todas las tablas administradas de Unity Catalog para simplificar el mantenimiento de datos y reducir los costos de almacenamiento. Consulte Optimización predictiva para tablas administradas de Unity Catalog.
El comando OPTIMIZE
vuelve a escribir archivos de datos para mejorar el diseño de datos de las tablas Delta. En el caso de las tablas con clústeres líquidos habilitados, OPTIMIZE
reescribe los archivos de datos para agrupar los datos mediante claves de agrupación en clústeres líquidos. En el caso de las tablas con particiones definidas, la compactación de archivos y el diseño de datos se realizan dentro de las particiones.
Las tablas sin clústeres líquidos pueden incluir opcionalmente una cláusula ZORDER BY
para mejorar la agrupación en clústeres de datos en la reescritura. Databricks recomienda usar clústeres líquidos en lugar de particiones, ZORDER
u otros enfoques de diseño de datos.
Consulte OPTIMIZE.
Ejemplos de sintaxis
Para desencadenar la compactación, ejecute el comando OPTIMIZE
:
SQL
OPTIMIZE table_name
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Si tiene una gran cantidad de datos y solo desea optimizar un subconjunto de ellos, puede especificar un predicado de partición opcional mediante WHERE
:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Nota:
- La optimización del empaquetado en contenedores es idempotente, lo que significa que si se ejecuta dos veces en el mismo conjunto de datos, la segunda ejecución no tiene ningún efecto.
- El objetivo del empaquetado en contenedores es generar archivos de datos equilibrados uniformemente con respecto a su tamaño en el disco, pero no necesariamente con respecto al número de tuplas por archivo. Sin embargo, las dos medidas a menudo están correlacionadas.
- Las API de Python y Scala para ejecutar
OPTIMIZE
operación están disponibles en Databricks Runtime 11.3 LTS y versiones posteriores.
Los lectores de tablas de Delta usan aislamiento de instantáneas, lo que significa que no se interrumpen cuando OPTIMIZE
quitan los archivos innecesarios del registro de transacciones. OPTIMIZE
no realiza ningún cambio relacionado con los datos en la tabla, por lo que una lectura antes y después de OPTIMIZE
tiene los mismos resultados. Aplicar OPTIMIZE
en una tabla que es un origen de streaming no afecta a las secuencias actuales ni futuras que tratan esta tabla como origen. OPTIMIZE
devuelve las estadísticas de archivo (mín., máx., total, etc.) de los archivos quitados y los archivos agregados por la operación. Las estadísticas de optimización también contienen las estadísticas de ordenación Z, el número de lotes y las particiones optimizadas.
También puede compactar archivos pequeños automáticamente mediante la compactación automática. Consulte Compactación automática de Delta Lake en Azure Databricks.
¿Con qué frecuencia debo ejecutar OPTIMIZE
?
Habilite la optimización predictiva para las tablas administradas de Unity Catalog para asegurarse de que OPTIMIZE
se ejecuta automáticamente cuando es rentable.
Cuando se elige la frecuencia con la que se ejecuta OPTIMIZE
, se generan concesiones entre rendimiento y costo. Para mejorar el rendimiento de las consultas del usuario final, ejecute OPTIMIZE
con más frecuencia. Esto incurrirá en un costo mayor debido al aumento del uso de recursos. Para optimizar el costo, ejecútelo con menos frecuencia.
Databricks recomienda empezar por ejecutar OPTIMIZE
diariamente y, a continuación, ajustar la frecuencia para equilibrar el costo y las ventajas del rendimiento.
¿Cuál es el mejor tipo de instancia en la que ejecutar OPTIMIZE
(empaquetado en contenedores y ordenación Z)?
Ambas son operaciones que consumen mucha CPU y que generan grandes cantidades de codificación y descodificación de Parquet.
Databricks recomienda los tipos de instancia optimizados para proceso. OPTIMIZE
también se beneficia de los discos SSD adjuntos.