Compartir a través de


Anular o reemplazar una tabla Delta

Azure Databricks admite comandos DDL estándar de SQL para quitar y reemplazar tablas registradas con el catálogo de Unity o el metastore de Hive. En este artículo se proporcionan ejemplos de eliminación y sustitución de tablas Delta y recomendaciones para la sintaxis en función del entorno configurado y el resultado deseado.

Cuándo anular una tabla

Debe usar DROP TABLE para quitar una tabla del metastore cuando quiera eliminar permanentemente la tabla y no tenga intención de crear una nueva en la misma ubicación. Por ejemplo:

DROP TABLE table_name

DROP TABLE tiene una semántica diferente en función del tipo de tabla y de si la tabla está registrada en el catálogo de Unity o en el metastore de Hive heredado.

Tipo de tabla. Metastore Comportamiento
Administrado Unity Catalog La tabla se quita del metastore y los datos subyacentes se marcan para su eliminación. Puede UNDROP datos en tablas administradas del catálogo de Unity durante 7 días.
Administrado Hive La tabla se quita del metastore y se eliminan los datos subyacentes.
Externos Unity Catalog La tabla se quita del metastore pero los datos subyacentes se conservan. Los privilegios de acceso de URI ahora se rigen por la ubicación externa que contiene los datos.
Externos Hive La tabla se quita del metastore pero los datos subyacentes se conservan. Los privilegios de acceso de URI no se modifican.

La semántica de DROP TABLE difiere entre los tipos de tabla, y el catálogo de Unity mantiene un historial de tablas Delta mediante un identificador de tabla interno. Sin embargo, después de que se complete la operación, el nombre de tabla registrado anteriormente ya no tiene un vínculo activo a los datos y al historial de tablas de la metastore. Este resultado es común a todas las tablas.

Consulte DROP TABLE.

Nota:

Databricks no recomienda el patrón de anular y volver a crear una tabla con el mismo nombre para canalizaciones o sistemas de producción, ya que este patrón puede dar lugar a resultados inesperados en operaciones simultáneas. Consulte Reemplazar datos con operaciones simultáneas.

Cuándo reemplazar una tabla

Databricks recomienda usar instrucciones CREATE OR REPLACE TABLE para casos de uso en los que desea sobrescribir completamente la tabla de destino con nuevos datos. Por ejemplo, para sobrescribir una tabla Delta con todos los datos de un directorio Parquet, puede ejecutar el siguiente comando:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

CREATE OR REPLACE TABLE tiene la misma semántica independientemente del tipo de tabla o metastore en uso. A continuación se describen ventajas importantes de CREATE OR REPLACE TABLE:

  • El contenido de la tabla se reemplaza, pero se mantiene la identidad de la tabla.
  • El historial de tablas se conserva y puede revertir la tabla a una versión anterior con el comando RESTORE.
  • La operación es una sola transacción, por lo que en ningún momento la tabla dejará de existir.
  • Las consultas simultáneas que leen desde la tabla pueden continuar sin interrupciones. Dado que la versión anterior y posterior a la sustitución todavía existe en el historial de tablas, las consultas simultáneas pueden hacer referencia a cualquiera de las versiones de la tabla según sea necesario.

Consulte CREATE TABLE [USING].

Reemplazar datos con operaciones simultáneas

Siempre que desee realizar un reemplazo completo de los datos de una tabla que se pueda usar en operaciones simultáneas, debe usar CREATE OR REPLACE TABLE.

No se debe utilizar el antipatrón siguiente:

-- This is an anti-pattern. Avoid doing this!
DROP TABLE IF EXISTS table_name;

CREATE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`;

Las razones de esta recomendación varían en función de si usa tablas administradas o externas, y de si usa el catálogo de Unity, pero en todos los tipos de tabla Delta que usan este patrón se puede producir un error, eliminación de registros o daños en los resultados.

En su lugar, Databricks recomienda usar siempre CREATE OR REPLACE TABLE, como en el ejemplo siguiente:

CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`

Dado que el historial de tablas se mantiene durante el reemplazo de datos atómicos, las transacciones simultáneas pueden validar la versión de la tabla de origen a la que se hace referencia y, por tanto, ser incapaces de conciliar transacciones simultáneas según sea necesario sin introducir un comportamiento o resultados inesperados.