Ampliación de tipos
Importante
Esta característica está en versión preliminar pública en Databricks Runtime 15.2 y versiones posteriores.
Las tablas con la ampliación de tipos habilitada permiten cambiar los tipos de datos de columna a un tipo más amplio sin volver a escribir archivos de datos subyacentes. Puede cambiar manualmente los tipos de columna o usar la evolución del esquema para evolucionar los tipos de columna.
La ampliación de tipos requiere Delta Lake. Todas las tablas administradas por Unity Catalog usan Delta Lake de forma predeterminada.
Cambios de tipo admitidos
Puede ampliar los tipos según las siguientes reglas:
Tipo de origen | Tipos más amplios admitidos |
---|---|
byte |
short , int , long |
short |
int , long |
int |
long |
float |
double |
decimal |
decimal con mayor precisión y la misma escala |
date |
timestampNTZ |
Los cambios de tipo se admiten para columnas y campos de nivel superior anidados dentro de estructuras, mapas y matrices.
Habilitación de la ampliación de tipos
Puede habilitar la ampliación de tipos en una tabla existente estableciendo la propiedad de tabla delta.enableTypeWidening
en true
:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'true')
También puede habilitar el ampliación de tipos durante la creación de la tabla:
CREATE TABLE T(c1 INT) TBLPROPERTIES('delta.enableTypeWidening' = 'true')
Importante
Al habilitar la ampliación de tipos, se establece la característica de tabla typeWidening-preview
, que actualiza los protocolos de lector y escritor. Debe usar Databricks Runtime 15.2 o superior para que interactúe con tablas con la ampliación de tipos habilitada. Si los clientes externos también interactúan con la tabla, compruebe que admiten esta característica de tabla. Consulte ¿Cómo administra Azure Databricks la compatibilidad de características de Delta Lake?.
Aplicación manual de un cambio de tipo
Use el comando ALTER COLUMN
para cambiar manualmente los tipos:
ALTER TABLE <table_name> ALTER COLUMN <col_name> TYPE <new_type>
Esta operación actualiza el esquema de tabla sin volver a escribir los archivos de datos subyacentes.
Tipos anchos con evolución automática del esquema
La evolución del esquema funciona con la ampliación de tipos para actualizar los tipos de datos de las tablas de destino para que coincidan con el tipo de datos entrantes.
Nota:
Sin la ampliación de tipos habilitada, la evolución del esquema siempre intenta reducir de forma segura los datos para que coincidan con los tipos de columna de la tabla de destino. Si no desea ampliar automáticamente los tipos de datos en las tablas de destino, deshabilite el ancho de tipos antes de ejecutar cargas de trabajo con la evolución del esquema habilitada.
Para usar la evolución del esquema para ampliar el tipo de datos de una columna, debe cumplir las siguientes condiciones:
- El comando usa
INSERT
oMERGE INTO
. - El comando se ejecuta con la evolución automática del esquema habilitada.
- La tabla de destino tiene habilitada la ampliación de tipos.
- El tipo de columna de origen es más amplio que el tipo de columna de destino.
- La ampliación de tipos admite el cambio de tipo.
Los errores de coincidencia de tipos que no cumplen todas estas condiciones siguen las reglas normales de cumplimiento de esquemas. Consulte Aplicación de esquemas.
Deshabilitación de la característica de tabla de ampliación de tipos
Puede evitar la ampliación accidental de tipos en tablas habilitadas estableciendo la propiedad en false
:
ALTER TABLE <table_name> SET TBLPROPERTIES ('delta.enableTypeWidening' = 'false')
Esta configuración impide futuros cambios de tipo en la tabla, pero no quita la característica de ampliación de tipos de la tabla ni deshace los tipos que han cambiado.
Si necesita quitar completamente las características de la tabla de ampliación de tipos, puede usar el comando DROP FEATURE
como se muestra en el siguiente ejemplo:
ALTER TABLE <table-name> DROP FEATURE 'typeWidening-preview' [TRUNCATE HISTORY]
Al quitar el ancho de tipo, se reescriben todos los archivos de datos que no se ajustan al esquema de tabla actual. Consulte Eliminación de características de tablas Delta.