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.
Azure Databricks valida la calidad de los datos aplicando el esquema en el momento de la escritura en las tablas de Delta Lake. La aplicación de esquemas no se aplica a las tablas que usan formatos no delta, como archivos CSV o JSON en el almacenamiento en la nube.
Aplicación obligatoria de esquemas para operaciones de INSERT
Azure Databricks aplica las reglas siguientes al insertar datos en una tabla:
- Todas las columnas insertadas deben existir en la tabla de destino.
- Todos los tipos de datos de columna deben coincidir con los tipos de datos de columna de la tabla de destino.
Nota
Azure Databricks intenta convertir de forma segura los tipos de datos de columna para que coincidan con la tabla de destino.
ejemplos de INSERT
Los siguientes ejemplos escriben en una tabla gestionada de Delta Lake llamada enforce_demo. Para crearlo, ejecuta lo siguiente:
CREATE OR REPLACE TABLE main.default.enforce_demo (id INT, name STRING, amount BIGINT);
Lo siguiente INSERT falla porque unknown_column no existe en enforce_demo. Azure Databricks devuelve un UNRESOLVED_COLUMN.WITH_SUGGESTION error (SQLSTATE 42703) que sugiere los nombres de columna válidos:
INSERT INTO main.default.enforce_demo (id, unknown_column) VALUES (1, 'value');
Lo siguiente INSERT tiene éxito. Azure Databricks convierte de forma segura el entero 42 al tipo BIGINT de la columna amount:
INSERT INTO main.default.enforce_demo (id, amount) VALUES (1, 42);
Aplicación obligatoria de esquemas para operaciones de MERGE
Azure Databricks aplica las siguientes reglas al insertar o actualizar datos como parte de una operación de MERGE:
- Si el tipo de datos de la instrucción de origen no coincide con la columna de destino,
MERGEintenta convertir de forma segura los tipos de datos de columna para que coincidan con la tabla de destino. - Las columnas de destino de una
UPDATEacción oINSERTdeben existir en la tabla de destino. - Cuando se usa
INSERT *oUPDATE SET *:- El conjunto de datos de origen debe tener todas las columnas presentes en la tabla de destino.
- El cumplimiento omite las columnas del conjunto de datos de origen que no están presentes en la tabla de destino.
ejemplos de MERGE
Los siguientes ejemplos reutilizan la enforce_demo tabla de la sección anterior, junto con una tabla fuente llamada enforce_source que tiene una columna extra. Para crear la tabla fuente, ejecuta lo siguiente:
CREATE OR REPLACE TABLE main.default.enforce_source (id INT, name STRING, amount BIGINT, extra_col STRING);
INSERT INTO main.default.enforce_source VALUES (1, 'Alice', 100, 'x'), (2, 'Bob', 200, 'y');
Lo siguiente MERGE falla porque asigna a unknown_column, que no existe en enforce_demo. Azure Databricks devuelve un DELTA_MERGE_UNRESOLVED_EXPRESSION error que nombra las columnas que puede resolver:
MERGE INTO main.default.enforce_demo AS t
USING main.default.enforce_source AS s
ON t.id = s.id
WHEN MATCHED THEN UPDATE SET t.unknown_column = s.name
WHEN NOT MATCHED THEN INSERT (id, unknown_column) VALUES (s.id, s.name);
La enforce_source tabla incluye una extra_col columna que enforce_demo no tiene. El siguiente MERGE con INSERT * tiene éxito porque la fuente contiene todas las columnas destino. La aplicación ignora extra_col:
MERGE INTO main.default.enforce_demo AS t
USING main.default.enforce_source AS s
ON t.id = s.id
WHEN NOT MATCHED THEN INSERT *;
Modificación de un esquema de tabla
Puede actualizar el esquema de una tabla mediante instrucciones explícitas ALTER TABLE o evolución automática del esquema. Consulte Actualización de esquemas de tabla con evolución del esquema.
Por ejemplo, para agregar una columna explícitamente:
ALTER TABLE catalog.schema.table_name ADD COLUMN new_column STRING;
Para habilitar la evolución automática del esquema para una operación de escritura, establezca la mergeSchema opción :
SQL
SET spark.databricks.delta.schema.autoMerge.enabled = true;
INSERT INTO catalog.schema.table_name SELECT * FROM source_table;
Python
df.write.option("mergeSchema", "true").mode("append").saveAsTable("catalog.schema.table_name")
La evolución del esquema tiene semántica especial para las operaciones de INSERT y MERGE. Consulte Habilitación de la evolución del esquema.
Tablas externas
Si modifica los metadatos de una tabla externa directamente con clientes externos fuera de Azure Databricks o mediante el acceso basado en rutas de acceso, el catálogo de Unity no sincroniza automáticamente las actualizaciones con el esquema. Esto podría impedir que la aplicación obligatoria del esquema funcione correctamente.
Ejecute MSCK REPAIR TABLE <table-name> SYNC METADATA para sincronizar el esquema con el catálogo de Unity. Consulte REPAIR TABLE.