Share via


Remover ou substituir uma tabela Delta

O Azure Databricks dá suporte a comandos DDL padrão do SQL para remover e substituir tabelas registradas pelo Catálogo do Unity ou pelo metastore do Hive. Este artigo fornece exemplos de remoção e substituição de tabelas Delta e recomendações para sintaxe, dependendo do ambiente configurado e do resultado desejado.

Quando remover uma tabela

Você deverá usar DROP TABLE para remover uma tabela do metastore quando quiser excluir permanentemente a tabela e não tiver intenção de criar uma tabela no mesmo local. Por exemplo:

DROP TABLE table_name

DROP TABLE tem semântica diferente dependendo do tipo de tabela e se a tabela está registrada no Catálogo do Unity ou no metastore herdado do Hive.

Tipo de tabela Metastore Comportamental
Gerenciada Catálogo do Unity A tabela é removida do metastore e os dados subjacentes são marcados para exclusão. Você pode UNDROP dados em tabelas gerenciadas do Catálogo do Unity por 7 dias.
Gerenciada Hive A tabela é removida do metastore e os dados subjacentes são excluídos.
Externos Catálogo do Unity A tabela é removida do metastore, mas os dados subjacentes permanecem. Os privilégios de acesso de URI agora são regidos pelo local externo que contém os dados.
Externos Hive A tabela é removida do metastore, mas os dados subjacentes permanecem. Nenhum privilégio de acesso a URI é alterado.

As semânticas de DROP TABLE diferem entre tipos de tabela e o Catálogo do Unity mantém um histórico de tabelas Delta usando uma ID de tabela interna. No entanto, todas as tabelas compartilham o resultado comum que, após a conclusão da operação, o nome da tabela registrado anteriormente já não tem mais um link ativo para dados e histórico de tabelas do metastore.

Veja DROP TABLE.

Observação

O Databricks não recomenda o padrão de remoção e recriação de uma tabela usando o mesmo nome para pipelines ou sistemas de produção, pois esse padrão pode resultar em resultados inesperados para operações simultâneas. Consulte Substituir dados por operações simultâneas.

Quando substituir uma tabela

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

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

CREATE OR REPLACE TABLE tem a mesma semântica, independentemente do tipo de tabela ou metastore em uso. As seguintes vantagens do CREATE OR REPLACE TABLE são importantes:

  • O conteúdo da tabela é substituído, mas a identidade da tabela é mantida.
  • O histórico da tabela é mantido e você pode reverter a tabela para uma versão anterior com o comando RESTORE.
  • A operação é apenas uma transação, portanto, nunca há nenhum momento em que a tabela não exista.
  • As consultas simultâneas que leem da tabela podem continuar sem interrupção. Como a versão antes e depois da substituição ainda existe no histórico da tabela, as consultas simultâneas podem referenciar qualquer versão da tabela conforme necessário.

Confira CREATE TABLE [USING].

Substituir dados por operações simultâneas

Sempre que você quiser executar uma substituição completa de dados em uma tabela que possa ser usada em operações simultâneas, você precisará usar CREATE OR REPLACE TABLE.

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

-- 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 dessa recomendação variam dependendo se você está usando tabelas gerenciadas ou externas e se você está usando o Catálogo do Unity, mas todos os tipos de tabela Delta que usam esse padrão podem resultar em um erro, registros descartados ou resultados corrompidos.

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

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

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