Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Las tablas con asignación de columnas habilitadas solo se pueden leer en Databricks Runtime 10.4 LTS y versiones posteriores.
- Habilitar la asignación de columnas podría causar problemas:
- Cargas de trabajo heredadas que se basan en nombres de directorio para leer tablas Delta. Las tablas con particiones con asignación de columnas usan prefijos aleatorios en lugar de nombres de columna para directorios de partición. Consulte ¿Delta Lake y Parquet comparten estrategias de particionamiento?.
- Operaciones posteriores mediante el flujo de datos de cambio delta. Consulte Limitaciones de la fuente de distribución de datos modificados para las tablas con asignación de columnas.
- Lecturas en streaming de la tabla Delta, incluidas en las canalizaciones declarativas de Lakeflow Spark. Consulte Mapeo y transmisión de columnas.
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:
- Pausar todas las operaciones de escritura simultáneas, incluidos los trabajos de streaming y las canalizaciones ETL.
- Deshabilite la optimización predictiva en la tabla.
- 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:
- Detener el trabajo
- Habilitar la asignación de columnas en la tabla
- Reiniciar el trabajo (primer reinicio: inicializa la asignación de columnas)
- 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")
)