Omisión de datos para Delta Lake

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.

Nota:

Tanto en Databricks Runtime 13.3 como en las versiones posteriores, Databricks recomienda usar la agrupación en clústeres para el diseño de tabla Delta. La agrupación en clústeres no es compatible con el orden Z. Consulte Uso de clústeres líquidos para tablas Delta.

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. Para esta recopilación, cada campo de una columna anidada se considera una columna individual. Puede modificar este comportamiento si establece 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.2 y versiones superiores 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 esta propiedad 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 y versiones posteriores, puede desencadenar manualmente el nuevo cálculo 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?

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 BYfecha 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 trabajo OPTIMIZE estén sesgadas, así como los tamaños de archivo resultantes. Sin embargo, esto es solo un problema para el propio comando OPTIMIZE; no debería tener ningún impacto negativo en las consultas posteriores.