Compartir vía


Omisión de datos

Nota:

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

La información de omisión de datos se recopila automáticamente al escribir datos en una tabla. Azure Databricks aprovecha esta información (valores mínimos y máximos, recuentos nulos y registros totales por archivo) en el momento de la consulta para proporcionar 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?.

Especificar columnas de estadísticas

En el caso de las tablas externas del catálogo de Unity, las estadísticas se recopilan en las primeras 32 columnas definidas en el esquema de tabla de forma predeterminada. Para las tablas administradas por Unity Catalog, las estadísticas de omisión de archivos se eligen de manera inteligente mediante la optimización predictiva y no están limitadas a 32 columnas. La optimización predictiva ejecuta ANALYZEautomáticamente , un comando para recopilar estadísticas. 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.

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
dataSkippingNumIndexedCols Todas las versiones admitidas de Databricks Runtime Aumente o disminuya el número de columnas en las que se recopilan las estadísticas. Depende del orden de las columnas.
dataSkippingStatsColumns Databricks Runtime 13.3 LTS y versiones posteriores Especifique una lista de nombres de columna para los que se recopilan las 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. En el ejemplo siguiente se invalida el comportamiento predeterminado de la colección de estadísticas para establecer la colección de estadísticas en columnas con nombre:

-- For Delta tables
ALTER TABLE table_name SET TBLPROPERTIES('delta.dataSkippingStatsColumns' = 'col1, col2, col3')

-- For Iceberg tables
ALTER TABLE table_name SET TBLPROPERTIES('iceberg.dataSkippingStatsColumns' = 'col1, col2, col3')

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. Las estadísticas no se aprovechan para 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 para una tabla mediante el siguiente comando:

ANALYZE TABLE table_name COMPUTE DELTA STATISTICS

Nota:

Las cadenas largas se truncan durante la recopilación de estadísticas. Puede 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 usar clústeres líquidos para todas las tablas nuevas. No es posible usar ZORDER en combinación con la agrupación en clústeres líquidos. Consulte Uso de clústeres líquidos para tablas.

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 Azure Databricks aprovechan automáticamente esta colocalización. Este comportamiento reduce la cantidad de datos que se deben leer. Para ordenar los datos en Z, especifique las columnas para ordenar en la cláusula :

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 ZORDER BY fecha y los registros más recientes son mucho más anchos (por ejemplo, matrices más largas o valores de cadena) que los que se han producido en el pasado, se espera que las duraciones de las OPTIMIZE tareas del trabajo estén distorsionadas, 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.