Cambio de nombre y eliminación de columnas con la asignación de columnas de Delta Lake

Importante

Esta característica está en versión preliminar pública.

Azure Databricks admite la asignación de columnas para las tablas de Delta Lake, lo que permite que los cambios de solo metadatos marquen las columnas como eliminadas o cambiadas de nombre sin volver a escribir los archivos de datos. También permite a los usuarios denominar columnas de tablas de Delta mediante caracteres no permitidos por Parquet, como los espacios, para que los usuarios puedan ingerir directamente datos de CSV o JSON en Delta sin necesidad de cambiar el nombre de las columnas debido a las restricciones de caracteres anteriores.

Importante

La habilitación de la asignación de columnas también permite prefijos de archivo aleatorios, lo que elimina la capacidad de explorar datos mediante la creación de particiones de estilo de Hive. Consulte ¿Delta Lake y Parquet comparten estrategias de creación de particiones?.

La habilitación de la asignación de columnas en tablas podría interrumpir las operaciones de bajada que dependen de la fuente de distribución de datos de cambios Delta. Consulte Cambio de las limitaciones de la fuente de distribución de datos para las tablas con la asignación de columnas habilitada.

La habilitación de la asignación de columnas en tablas podría interrumpir la lectura de streaming de la tabla Delta como origen, incluso en Delta Live Tables. Consulte Streaming con asignación de columnas y cambios de esquema.

Habilitación de la asignación de columnas de Delta Lake

Importante

La habilitación de la asignación de columnas para una tabla actualiza la versión de la tabla Delta. Esta actualización del protocolo es irreversible. Las tablas con asignación de columnas habilitada solo se pueden leer en Databricks Runtime 10.4 LTS y versiones posteriores.

La asignación de columnas requiere los siguientes protocolos Delta:

  • Versión 2 o posterior del lector.
  • Versión 5 o posterior del escritor.

Para una tabla de Delta con las versiones de protocolo necesarias, puede establecer delta.columnMapping.mode en name para habilitar la asignación de columnas.

Puede usar el siguiente comando para actualizar la versión de la tabla y habilitar la asignación de columnas:

  ALTER TABLE <table-name> SET TBLPROPERTIES (
    'delta.minReaderVersion' = '2',
    'delta.minWriterVersion' = '5',
    'delta.columnMapping.mode' = 'name'
  )

Nota

No se puede desactivar la asignación de columnas después de habilitarla. Si intenta establecer 'delta.columnMapping.mode' = 'none', obtendrá un error.

Cambio del nombre de una columna

Nota:

Disponible en Databricks Runtime 10.4 LTS y versiones posteriores.

Cuando la asignación de columnas está habilitada para una tabla de Delta, puede cambiar el nombre de una columna:

ALTER TABLE <table-name> RENAME COLUMN old_col_name TO new_col_name

Para más ejemplos, consulte Actualización del esquema de tabla de Delta Lake.

Quitar columnas

Nota:

Disponible en Databricks Runtime 11.3 LTS y versiones posteriores.

Cuando está habilitada la asignación de columnas para una tabla Delta, puede eliminar una o más columnas:

ALTER TABLE table_name DROP COLUMN col_name
ALTER TABLE table_name DROP COLUMNS (col_name_1, col_name_2, ...)

Para más información, consulte Actualización del esquema de tabla de Delta Lake.

Caracteres admitidos en los nombres de columna

Cuando la asignación de columnas está habilitada para una tabla de Delta, puede incluir espacios y cualquiera de estos caracteres en los nombres de columna de la tabla: ,;{}()\n\t=.

Streaming con asignación de columnas y cambios de esquema

Importante

Esta característica está en versión preliminar pública en Databricks Runtime 13.3 LTS y versiones posteriores.

Puede proporcionar una ubicación de seguimiento de esquemas para habilitar el streaming desde tablas Delta con la asignación de columnas habilitada. Esto soluciona un problema en el que los cambios de esquema no aditivos podrían dar lugar a secuencias rotas.

Cada lectura de streaming en un origen de datos debe tener su propia schemaTrackingLocation especificada. La schemaTrackingLocation especificada debe estar incluida en el directorio especificado para la checkpointLocation de la tabla de destino para la escritura de streaming.

Nota:

Para las cargas de trabajo de streaming que combinan datos de varias tablas Delta de origen, debe especificar directorios únicos dentro de checkpointLocation para cada tabla de origen.

La opción schemaTrackingLocation se usa para especificar la ruta de acceso para el seguimiento de esquemas, como se muestra en el ejemplo de código siguiente:

checkpoint_path = "/path/to/checkpointLocation"

(spark.readStream
  .option("schemaTrackingLocation", checkpoint_path)
  .table("delta_source_table")
  .writeStream
  .option("checkpointLocation", checkpoint_path)
  .toTable("output_table")
)