Pular para o conteúdo principal

Excluir ou substituir uma tabela

Databricks oferece suporte ao comando DDL padrão SQL para excluir e substituir tabelas registradas no Unity Catalog ou no Hive metastore. Este artigo fornece exemplos de como excluir e substituir tabelas, além de recomendações de sintaxe dependendo do seu ambiente configurado e do resultado desejado.

Quando derrubar uma mesa

Você deve usar DROP TABLE para remover uma tabela do metastore quando quiser excluí-la permanentemente e não tiver a intenção de criar uma nova tabela no mesmo local. Por exemplo:

SQL
DROP TABLE table_name

DROP TABLE tem semântica diferente, dependendo do tipo de tabela e se a tabela está registrada em Unity Catalog ou no legado Hive metastore.

Tipo de mesa

Metastore

Comportamento

Gerenciadas

Unity Catalog

A tabela é removida do metastore e os dados subjacentes são marcados para exclusão. O senhor pode UNDROP dados em Unity Catalog gerenciar tabelas por 7 dias.

Gerenciadas

Hive

A tabela é removida do metastore e os dados subjacentes são excluídos.

Externo

Unity Catalog

A tabela é removida do metastore, mas os dados subjacentes permanecem. Os privilégios de acesso ao URI agora são regidos pelo local externo que contém os dados.

Externo

Hive

A tabela é removida do metastore, mas os dados subjacentes permanecem. Todos os privilégios de acesso ao URI permanecem inalterados.

DROP TABLE A semântica difere entre os tipos de tabela, e Unity Catalog mantém um histórico das tabelas usando um ID de tabela interno. No entanto, todas as tabelas compartilham o resultado comum de que, após a conclusão das operações, o nome da tabela previamente registrada deixa de ter um link ativo para os dados e o histórico da tabela no metastore.

Consulte DROP TABLE.

nota

Databricks não recomenda o padrão de eliminar e depois recriar uma tabela usando o mesmo nome para pipeline ou sistemas de produção, pois esse padrão pode resultar em resultados inesperados para operações concorrentes. Consulte Substituir dados por operações concorrentes.

Quando substituir uma mesa

A Databricks recomenda o uso de instruções CREATE OR REPLACE TABLE para casos de uso em que você deseja sobrescrever completamente a tabela de destino com novos dados. Por exemplo, para sobrescrever uma tabela com todos os dados de um diretório Parquet , você pode executar o seguinte comando:

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

CREATE OR REPLACE TABLE Não é compatível com o Unity Catalog para gerenciar tabelas Iceberg . Use comandos DROP TABLE e CREATE TABLE separados.

CREATE OR REPLACE TABLE tem a mesma semântica, independentemente do tipo de tabela ou metastore em uso. A seguir estão as vantagens importantes do CREATE OR REPLACE TABLE:

  • O conteúdo da tabela é substituído, mas a identidade da tabela é mantida.
  • O histórico da tabela é mantido, e o senhor pode reverter a tabela para uma versão anterior com o comando RESTORE.
  • As operações são uma única transação, portanto, nunca há um momento em que a tabela não exista.
  • As consultas concorrente de leitura da tabela podem continuar sem interrupção. Como a versão anterior e posterior à substituição ainda existe no histórico da tabela, as consultas concorrente podem fazer referência a qualquer versão da tabela, conforme necessário.
  • Se a tabela original incluísse máscaras de coluna, essas máscaras serão mantidas para todas as colunas que ainda existirem na nova tabela. Isso garante que as políticas de acesso aos dados sejam preservadas.

Consulte CREATE TABLE [USING].

Substituir dados por operações concorrentes

Sempre que quiser fazer uma substituição completa dos dados em uma tabela que possa ser usada em operações concorrentes, o senhor deve usar o site CREATE OR REPLACE TABLE.

O seguinte antipadrão não deve ser usado:

SQL
-- 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`;

Os motivos para essa recomendação variam dependendo se você está usando tabelas gerenciadas ou externas e se está usando Unity Catalog, mas, em todos os tipos de tabela, usar esse padrão pode resultar em erro, perda de registros ou resultados corrompidos.

Em vez disso, a Databricks recomenda sempre usar CREATE OR REPLACE TABLE, como no exemplo a seguir:

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

Como o histórico da tabela é mantido durante a substituição atômica de dados, as transações concorrente podem validar a versão da tabela de origem referenciada e, portanto, falhar ou reconciliar as transações concorrente conforme necessário, sem introduzir comportamento ou resultados inesperados.