Quitar o reemplazar una tabla

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. El comportamiento de eliminación y reemplazo difiere según el tipo de tabla y el metastore. Elija el comando correcto para evitar errores de operación simultánea o pérdida de datos.

Cuándo eliminar una tabla

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

DROP TABLE table_name

DROP TABLE tiene comportamientos diferentes 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
Managed Catálogo de Unity La tabla se quita del metastore y los datos subyacentes se marcan para su eliminación. Puede UNDROP una tabla administrada dentro del período de recuperación configurado (7 días de forma predeterminada). Consulte Quitar una tabla administrada.
Managed Hive La tabla se quita del metastore y se eliminan los datos subyacentes.
External Catálogo de Unity 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.
External Hive La tabla se quita del metastore pero los datos subyacentes se conservan. Los privilegios de acceso de las URI no se modifican.

Unity Catalog mantiene un historial de tablas mediante un identificador de tabla interno. Para todos los tipos de tabla, una vez completada la operación de eliminación, el nombre de tabla registrado anteriormente ya no tiene un vínculo activo a los datos y el historial de tablas de la metastore.

Consulte DROP TABLE.

Nota:

Databricks no recomienda quitar y volver a crear una tabla con el mismo nombre para canalizaciones o sistemas de producción, ya que esto puede dar lugar a resultados inesperados para las 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 con todos los datos de un directorio Parquet, ejecute 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 nunca hay una hora en la que la tabla no existe.
  • 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.
  • Si la tabla original incluye máscaras de columna, esas máscaras se conservan para las columnas que todavía existen en la nueva tabla. Esto garantiza que se conserven las directivas de acceso a datos.

Consulte CREATE TABLE [USING].

Reemplazar datos con operaciones simultáneas

Cuando quiera 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 deberías usar el siguiente antipatrón:

DROP TABLE IF EXISTS table_name;

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

Para todos los tipos de tabla, independientemente de si usa o no el catálogo de Unity, el uso de este patrón puede producir un error, registros eliminados o resultados dañados.

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 reemplazo atómico conserva el historial de la tabla, las transacciones concurrentes pueden validar la versión de la tabla de origen a la que hacen referencia y hacer fallar o reconciliar las transacciones concurrentes sin comportamientos inesperados.