Compartir a través de


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

En esta página se describe cómo la asignación de columnas de Delta Lake permite que los cambios de solo metadatos marquen las columnas como eliminadas o cambiadas de nombre sin volver a escribir archivos de datos.

Azure Databricks admite la asignación de columnas para tablas de Delta Lake. La asignación de columnas permite que los cambios únicamente de metadatos marquen las columnas como eliminadas o renombradas sin volver a escribir archivos de datos. La asignación de columnas también permite usar caracteres no permitidos por Parquet en nombres de columna, como espacios. Esto le permite ingerir directamente datos CSV o JSON en Delta sin cambiar el nombre de las columnas.

Requisitos previos y limitaciones

Antes de habilitar la asignación de columnas, tenga en cuenta las siguientes limitaciones:

Habilitar asignación de columnas

Use el siguiente comando para habilitar el mapeo de columnas:

ALTER TABLE <table-name> SET TBLPROPERTIES (
  'delta.columnMapping.mode' = 'name'
)

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

  • Lector versión 2 o posterior
  • Writer versión 5 o superior

Consulte Compatibilidad y protocolos de características de Delta Lake.

Cambiar el 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 obtener más ejemplos, consulte Actualización del esquema de tabla.

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 obtener más información, consulte Actualización del esquema de la tabla.

Caracteres admitidos en nombres de columna

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

Quitar asignación de columnas

Puede quitar la asignación de columnas de una tabla mediante el siguiente comando:

ALTER TABLE <table-name> SET TBLPROPERTIES ('delta.columnMapping.mode' = 'none')

Advertencia

Al quitar la asignación de columnas, se vuelven a escribir todos los archivos de datos para reemplazar los nombres de columna físicos por nombres lógicos. Esta operación no admite la resolución de conflictos físicos o de nivel de fila.

Las operaciones de escritura simultáneas provocarán un ConcurrentModificationException. Antes de quitar la asignación de columnas:

  1. Pausar todas las operaciones de escritura simultáneas, incluidos los trabajos de streaming y las canalizaciones ETL.
  2. Deshabilite la optimización predictiva en la tabla.
  3. Para tablas grandes, programe esta operación durante períodos de baja actividad.

Para obtener un enfoque alternativo que admita la degradación del protocolo de tabla, consulte Deshabilitar la asignación de columnas.

Deshabilitar la asignación de columnas

En Databricks Runtime 15.3 y versiones posteriores, puede usar el comando DROP FEATURE para quitar la asignación de columnas y degradar el protocolo de tabla. Use este enfoque en lugar de quitar la asignación de columnas si necesita degradar las versiones del protocolo para la compatibilidad con lectores anteriores.

Importante

Al eliminar el mapeo de columnas de una tabla, no se eliminan los prefijos aleatorios utilizados en los nombres de directorio para las tablas particionadas.

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

Mapeo de columnas y streaming

Puede proporcionar una ubicación de seguimiento del esquema para habilitar el streaming desde tablas Delta con la asignación de columnas activada. Esto soluciona un problema por el que los cambios de esquema no aditivos podrían dar lugar a flujos rotos.

Cada lectura de streaming en un origen de datos debe tener su propia schemaTrackingLocation especificada. La schemaTrackingLocation especificada debe estar contenida dentro del directorio especificado para el checkpointLocation de la tabla de destino para la escritura en flujo continuo. 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.

Habilitar la asignación de columnas en un trabajo en ejecución

Importante

Para habilitar la asignación de columnas en un trabajo de streaming en ejecución:

  1. Detener el trabajo
  2. Habilitar la asignación de columnas en la tabla
  3. Reiniciar el trabajo (primer reinicio: inicializa la asignación de columnas)
  4. Reinicie el trabajo de nuevo (segundo reinicio: habilita los cambios de esquema)

Los cambios de esquema adicionales (agregar o quitar columnas, cambiar los tipos de columna) también requieren reiniciar el trabajo.

Especificar la ubicación de seguimiento de esquemas

En el ejemplo siguiente se muestra cómo especificar un schemaTrackingLocation para una lectura de streaming de una tabla Delta con asignación de columnas:

checkpoint_path = "/path/to/checkpointLocation"

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

Pasos siguientes