Compartir a través de


Compatibilidad de intercalación con Delta Lake

Puede especificar intercalaciones en campos de cadena y leer tablas Delta que usan intercalaciones en Databricks Runtime 16.4 LTS y versiones posteriores.

Al habilitar la intercalación para una tabla, se agrega la collations-preview característica de tabla de escritura. Consulte Compatibilidad y protocolos de características de Delta Lake.

Nota:

De forma predeterminada, Delta Lake establece la intercalación de los campos de cadena en UTF8_BINARY.

Creación de una tabla con intercalación en el nivel de columna

Puede crear una nueva tabla con intercalación en el nivel de columna mediante el siguiente comando:

CREATE TABLE $tableName (
 nonCollatedColName STRING,
 collatedColName STRING COLLATE UNICODE,
 structColName STRUCT<nestedFieldName: STRING COLLATE UNICODE>,
 mapColName MAP<STRING, STRING COLLATE UNICODE>,
 arrayColName ARRAY<STRING COLLATE UNICODE>
) USING delta

Modificar una columna de tabla para definir la intercalación

Puede actualizar una columna existente para usar la intercalación mediante los siguientes comandos:

ALTER TABLE tableName ALTER COLUMN columnName TYPE newType

Para quitar una intercalación no predeterminada (si existe):

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_BINARY

Para cambiar la ordenación de la columna a utf8_lcase:

ALTER TABLE tableName ALTER COLUMN columnName TYPE STRING COLLATE UTF8_LCASE

Cambiar la intercalación de una tabla no actualiza automáticamente las estadísticas ni la disposición de los datos para la información escrita previamente. Para mejorar el salto de archivos de los datos históricos en la nueva configuración de intercalación, Databricks recomienda lo siguiente:

  • Ejecute ANALYZE table_name COMPUTE DELTA STATISTICS para actualizar las estadísticas de omisión de archivos para los archivos de datos existentes.

  • En el caso de las tablas con clústeres líquidos habilitados, ejecute OPTIMIZE FULL table_name para actualizar la agrupación en clústeres líquidos.

  • Para las tablas que usan ZORDER, haga lo siguiente:

    • Deshabilite la optimización incremental en la sesión de Spark reemplazando la configuración predeterminada de Spark con el siguiente comando:

      SET spark.databricks.optimize.incremental=false
      
    • Ejecute OPTIMIZE table_name ZORDER BY zorder_column para volver a escribir todos los archivos de datos existentes.

Azure Databricks siempre respetará la intercalación en los resultados de la consulta.

Deshabilitar la collación de una tabla

Debe deshabilitar explícitamente la intercalación para cada columna de cadena de una tabla antes de quitar la característica de intercalación.

Utilice la siguiente sintaxis para establecer la intercalación de una columna en UTF8_BINARY.

ALTER TABLE table_name
ALTER COLUMN column_name
TYPE STRING
COLLATE UTF8_BINARY

Para quitar la característica de tabla, ejecute el siguiente comando:

ALTER TABLE table_name
DROP FEATURE collations-preview

Consulte Eliminar una característica de tabla de Delta Lake y degradar el protocolo de tabla.

Evolución y intercalación de esquemas

La intercalación interactúa con la evolución del esquema mediante las siguientes reglas:

  • Si una columna de origen ya existe en la tabla de destino, la intercalación de la columna en la tabla de destino no se modifica.
  • Si se especifica la intercalación de una columna de origen, la columna agregada a la tabla de destino utiliza la intercalación especificada.
  • Si la tabla de destino no tiene habilitada la intercalación cuando se agrega una columna con intercalación, la collations-preview característica de tabla está habilitada.

Limitaciones

Existen las siguientes limitaciones para las tablas con la intercalación habilitada:

  • Las tablas delta creadas externamente con una intercalación no reconocida por Databricks Runtime producen una excepción cuando se consulta.
  • No hay soporte para Delta Sharing.
  • Las columnas intercaladas no se pueden usar con CHECK restricciones.
  • Las columnas generadas no pueden usar la intercalación.
  • Las columnas intercaladas no se pueden usar con columnas de índice de filtro de Bloom.
  • No se admite la intercalación en las API de OSS Delta Lake para Scala o Python. Debe usar Spark SQL o las APIs de DataFrame para habilitar la ordenación.
  • No se admite la sobrescritura de particiones dinámicas en columnas intercaladas.
  • No se puede hacer referencia a las columnas intercaladas en consultas de estado de Structured Streaming.
  • Lectores externos que no respetan la funcionalidad alternativa de collations-preview en tablas recurren a la intercalación predeterminada de UTF8_BINARY.
  • Un MAP no puede tener una clave que sea una cadena intercalada.
  • UniForm no funciona con intercalaciones.