Índice de omisión de datos

Importante

DATASKIPPING INDEX se quitó en Databricks Runtime 7.0. Se recomienda usar tablas Delta en su lugar, que ofrecen funcionalidades mejoradas de omisión de datos.

Importante

Esta documentación se ha retirado y es posible que no se actualice. Los productos, servicios o tecnologías mencionados en este contenido ya no se admiten. Consulte Omisión de datos para Delta Lake.

Descripción

Además de la eliminación de particiones, Databricks Runtime incluye otra característica que está pensada para evitar el examen de datos irrelevantes, concretamente el índice de omisión de datos. Usa estadísticas de nivel de archivo para realizar omisiones adicionales en la granularidad de los archivos. Esto funciona con la creación de particiones de estilo Hive, pero no depende de ella.

La eficacia de la omisión de datos depende de las características de los datos y de su diseño físico. Como la omisión se realiza en la granularidad de los archivos, es importante que los datos estén particionados horizontalmente en varios archivos. Esto suele ocurrir como consecuencia de tener varios trabajos de anexión, creación de particiones (aleatorias), creación de cubos o el uso de spark.sql.files.maxRecordsPerFile. Funciona mejor en tablas con cubos ordenados (df.write.bucketBy(...).sortBy(...).saveAsTable(...) / CREATE TABLE ... CLUSTERED BY ... SORTED BY ...) o con columnas que están correlacionadas con claves de partición (por ejemplo, brandName - modelName, companyID - stockPrice), pero también cuando los datos simplemente muestran cierta ordenación o agrupación en clústeres (por ejemplo, orderID, bitcoinValue).

Nota:

Esta característica beta tiene una serie de limitaciones importantes:

  • Opcional: debe habilitarse manualmente por tabla.
  • Solo SQL: no hay ninguna DataFrame API para ella.
  • Una vez indexada una tabla, no se garantiza que los efectos de las operaciones INSERT o ADD PARTITION posteriores sean visibles hasta que se realice explícitamente una operación REFRESH en el índice.

Sintaxis de SQL

Crear índice

CREATE DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

Habilita la omisión de datos en la tabla especificada para las primeras (es decir, situadas más a la izquierda) N columnas admitidas, donde N se controla mediante spark.databricks.io.skipping.defaultNumIndexedCols (valor predeterminado: 32).

Las columnas partitionBy siempre se indexan y no cuentan para este valor de N.

Creación de un índice para columnas

CREATE DATASKIPPING INDEX ON [TABLE] [db_name.]table_name
    FOR COLUMNS (col1, ...)

Habilita la omisión de datos en la tabla especificada para la lista de columnas indicada. Igual que antes, siempre se indexarán todas las columnas partitionBy, además de las especificadas.

Descripción de un índice

DESCRIBE DATASKIPPING INDEX [EXTENDED] ON [TABLE] [db_name.]table_name

Muestra qué columnas de la tabla especificada se indexan, junto con los tipos correspondientes de estadísticas de nivel de archivo que se recopilan.

Si se especifica EXTENDED, se muestra una tercera columna denominada "effectiveness_score", que proporciona una medida aproximada de lo beneficiosa que esperamos que sea la operación DataSkipping para los filtros de las columnas correspondientes.

Actualización de un índice completo

REFRESH DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

Vuelve a generar todo el índice. Es decir, todas las particiones de la tabla se volverán a indexar.

Actualización de las particiones

REFRESH DATASKIPPING INDEX ON [TABLE] [db_name.]table_name
    PARTITION (part_col_name1[=val1], part_col_name2[=val2], ...)

Vuelve a indexar solo las particiones especificadas. Por lo general, esta operación debería ser más rápida que la actualización de un índice completo.

Eliminación de índice

DROP DATASKIPPING INDEX ON [TABLE] [db_name.]table_name

Deshabilita la omisión de datos en la tabla especificada y elimina todos los datos de índice.