Pular para o conteúdo principal

Soltar ou substituir uma tabela

A Databricks oferece suporte a comandos DDL padrão SQL para descartar e substituir tabelas registradas no Unity Catalog ou no Hive metastore. Este artigo fornece exemplos de exclusão e substituição de tabelas e recomendações de sintaxe, dependendo do seu ambiente configurado e do resultado desejado.

Quando descartar uma tabela

Você deve usar DROP TABLE para remover uma tabela do metastore quando desejar 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 possui semânticas diferentes dependendo do tipo de tabela e se a tabela está registrada no Unity Catalog ou no Hive metastore.

Tipo de tabela

Metastore

Comportamento

Gerenciadas

Unity Catalog

A tabela é removida do metastore e os dados subjacentes são marcados para exclusão. É possível gerenciar dados em tabelas gerenciadas do Unity Catalog por 7 dias.UNDROP

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 a URI são agora regidos pelo local externo que contém os dados.

Externo

Hive

A tabela é removida do metastore, mas os dados subjacentes permanecem. Quaisquer privilégios de acesso a URIs permanecem inalterados.

DROP TABLE A semântica difere entre os tipos de tabela, e o Unity Catalog mantém uma história das tabelas utilizando um ID de tabela interno. No entanto, todas as tabelas compartilham o resultado comum de que, após a conclusão da operação, o nome da tabela registrado anteriormente não possui mais um vínculo ativo com os dados e o histórico da tabela do metastore.

See DROP TABLE.

nota

A Databricks não recomenda o padrão de descartar e, em seguida, recriar 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 concorrentes. Consulte Substituir dados com operações concorrentes.

Quando substituir uma tabela

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

SQL
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 do metastore em uso. A seguir, estão as importantes vantagens de CREATE OR REPLACE TABLE:

  • O conteúdo da tabela é substituído, mas a identidade da tabela é mantida.
  • O histórico da tabela é retido, e você pode reverter a tabela para uma versão anterior com o comando RESTORE.
  • A operação é uma transação única, então nunca há um momento em que a tabela não exista.
  • Consultas concorrentes lendo a tabela podem continuar sem interrupção. Porque a versão anterior e posterior à substituição ainda existe na história da tabela, consultas concorrentes podem fazer referência a qualquer uma das versões da tabela, conforme necessário.
  • Se a tabela original incluía máscaras de coluna, essas máscaras são retidas para quaisquer colunas que ainda existam na nova tabela. Isso garante que as políticas de acesso a dados sejam preservadas.

Consulte CREATE TABLE [USING].

Substituir dados com operações concorrentes

Sempre que quiser realizar uma substituição completa de dados em uma tabela que possa ser usada em operações concorrentes, você deve usar CREATE OR REPLACE TABLE.

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

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

As razões para esta recomendação variam dependendo do uso de tabelas gerenciadas ou externas e do Unity Catalog, mas, em todos os tipos de tabela, o uso desse padrão pode resultar em um erro, registros descartados 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 dos dados, transações concorrentes podem validar a versão da tabela de origem referenciada e, portanto, falhar ou conciliar transações concorrentes conforme necessário, sem introduzir comportamentos ou resultados inesperados.