Omisión de datos para Delta Lake
Nota:
En Databricks Runtime 13.3 y versiones posteriores, Databricks recomienda usar la agrupación en clústeres líquidos para el diseño de tablas Delta. La agrupación en clústeres no es compatible con el orden Z. Consulte Uso de clústeres líquidos para tablas Delta.
La información de omisión de datos se recopila automáticamente al escribir datos en una tabla de Delta. Delta Lake en Azure Databricks aprovecha esta información (valores mínimos y máximos, recuentos nulos y registros totales por archivo) en tiempo de consulta para ofrecer consultas más rápidas.
Debe tener estadísticas recopiladas para las columnas que se usan en instrucciones ZORDER
. Vea ¿Qué es la ordenación Z?.
Especificación de columnas de estadísticas Delta
De manera predeterminada, Delta Lake recopila estadísticas sobre las primeras 32 columnas definidas en el esquema de la tabla. Cuando se habilita la optimización predictiva, las estadísticas de omisión de archivos se eligen de forma inteligente y no se limitan a las primeras 32 columnas. La optimización predictiva ejecuta ANALYZE
automáticamente , un comando para recopilar estadísticas, en tablas administradas del catálogo de Unity. 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.
Importante
La optimización predictiva con ANALYZE
está en versión preliminar pública. Incluye la colección de estadísticas inteligentes durante las escrituras. Use este formulario para registrarse en la versión preliminar pública.
Si no usa la optimización predictiva, puede modificar el comportamiento que limita las recopilaciones de estadísticas a 32 columnas estableciendo una de las siguientes propiedades de tabla:
Propiedad de tabla | Databricks Runtime admitido | Descripción |
---|---|---|
delta.dataSkippingNumIndexedCols |
Todas las versiones admitidas de Databricks Runtime | Aumente o disminuya el número de columnas en las que Delta recopila estadísticas. Depende del orden de las columnas. |
delta.dataSkippingStatsColumns |
Databricks Runtime 13.3 LTS y versiones posteriores | Especifique una lista de nombres de columna para los que Delta Lake recopila estadísticas. Reemplaza a dataSkippingNumIndexedCols . |
Las propiedades de tabla se pueden establecer al crear las tablas o con instrucciones ALTER TABLE
. Consulte Referencia de propiedades de tabla Delta.
La actualización de estas propiedades no vuelve a calcular automáticamente las estadísticas de los datos existentes. En su lugar, afecta al comportamiento de la recopilación de estadísticas futuras al agregar o actualizar datos en la tabla. Delta Lake no saca provecho de las estadísticas de las columnas que no se incluyen en la lista actual de columnas de estadísticas.
En Databricks Runtime 14.3 LTS y versiones posteriores, si ha modificado las propiedades de la tabla o ha cambiado las columnas especificadas para las estadísticas, puede desencadenar manualmente la recomputación de estadísticas de una tabla Delta mediante el siguiente comando:
ANALYZE TABLE table_name COMPUTE DELTA STATISTICS
Nota:
Las cadenas largas se truncan durante la recopilación de estadísticas. Podría optar por excluir columnas de cadena largas de la colección de estadísticas, especialmente si las columnas no se usan con frecuencia para filtrar consultas.
¿Qué es la ordenación Z?
Nota:
Databricks recomienda el uso de la agrupación en clústeres líquidos para todas las tablas Delta nuevas. No es posible usar ZORDER
en combinación con la agrupación en clústeres líquidos.
La ordenación Z es una técnica para colocar información relacionada en el mismo conjunto de archivos. Los algoritmos de omisión de datos de Delta Lake en Azure Databricks usan esta coubicación automáticamente. Este comportamiento reduce considerablemente la cantidad de datos que Delta Lake en Azure Databricks necesita leer. Para aplicar la ordenación Z a los datos, especifique las columnas en las que se va a ordenar en la cláusula ZORDER BY
:
OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType)
Si espera que una columna se use normalmente en predicados de consulta y si esa columna tiene una cardinalidad alta (es decir, un gran número de valores distintos), use ZORDER BY
.
Puede especificar varias columnas para ZORDER BY
como una lista separada por comas. Pero la eficacia de la situación disminuye con cada columna adicional. La ordenación Z en columnas que no incluyen estadísticas recopiladas sería ineficaz y una pérdida de recursos. Esto se debe a que la omisión de datos requiere estadísticas locales de columna, como min, max y count. Puede configurar la recopilación de estadísticas en determinadas columnas reordenando las columnas del esquema o bien puede aumentar el número de columnas en las que se recopilan estadísticas.
Nota:
La ordenación Z no es idempotente, sino que pretende ser una operación incremental. No se garantiza que el tiempo que se tarda en realizar la ordenación Z se reduzca a lo largo de varias ejecuciones. Pero si no se han agregado datos nuevos a una partición en la que se acaba de aplicar la ordenación Z, otra ordenación de este tipo de esa partición no tendrá ningún efecto.
La ordenación Z tiene como objetivo generar archivos de datos equilibrados uniformemente con respecto al número de tuplas, pero no necesariamente con respecto al tamaño de los datos en el disco. Las dos medidas suelen estar correlacionadas, pero puede haber situaciones en las que no sea así, lo que conduce a un sesgo en la optimización de los tiempos de las tareas.
Por ejemplo, si aplica
ZORDER BY
fecha y los registros más recientes son mucho más amplios (por ejemplo, matrices más largas o valores de cadena) que los del pasado, se espera que las duraciones de la tarea del trabajoOPTIMIZE
estén sesgadas, así como los tamaños de archivo resultantes. Sin embargo, esto es solo un problema para el propio comandoOPTIMIZE
; no debería tener ningún impacto negativo en las consultas posteriores.