Eliminar ou substituir uma tabela Delta
Databricks oferece suporte ao comando DDL padrão SQL para descartar e substituir tabelas registradas no Unity Catalog ou no Hive metastore. Este artigo fornece exemplos de eliminação e substituição de tabelas Delta e recomendações de sintaxe, dependendo do ambiente configurado e do resultado desejado.
Quando descartar uma mesa
Você deve usar DROP TABLE
para remover uma tabela do metastore quando quiser excluir permanentemente a tabela e não tiver intenção de criar uma nova 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 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. Você pode |
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 controlados 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 ao URI permanecem inalterados. |
DROP TABLE
a semântica difere entre os tipos de tabela, e o Unity Catalog mantém uma história de tabelas Delta usando um ID de tabela interno. Porém, todas as tabelas compartilham o resultado comum de que após a conclusão das operações, o nome da tabela previamente cadastrado não possui mais um link ativo para os dados e a história da tabela do metastore.
Veja DROP TABLE.
Observação
A 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 simultâneas. Consulte Substituir dados por operações simultâneas.
Quando substituir uma mesa
A Databricks recomenda usar instruções CREATE OR REPLACE TABLE
para casos de uso em que você deseja substituir totalmente a tabela de destino por novos dados. Por exemplo, para substituir uma tabela Delta com todos os dados de um diretório Parquet, você poderia 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. A seguir estão vantagens importantes de CREATE OR REPLACE TABLE
:
O conteúdo da tabela é substituído, mas a identidade da tabela é mantida.
A tabela história é mantida e você pode reverter a tabela para uma versão anterior com o comando
RESTORE
.As operações são uma transação única, portanto nunca há um momento em que a tabela não exista.
consultas simultâneas lendo da tabela podem continuar sem interrupção. Como a versão antes e depois da substituição ainda existe na tabela história, consultas simultâneas podem fazer referência a qualquer versão da tabela, conforme necessário.
Consulte CREATE TABLE [USING].
Substitua dados por operações simultâneas
Sempre que desejar realizar uma substituição completa de dados de uma tabela que possa ser utilizada em operações simultâneas, deverá utilizar 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 para esta recomendação variam dependendo se você está usando tabelas gerenciadas ou externas e se você está usando o Unity Catalog, mas em todos os tipos de tabela Delta usar esse padrão pode resultar em erro, registros descartados ou resultados corrompidos.
Em vez disso, o Databricks recomenda sempre usar CREATE OR REPLACE TABLE
, como no exemplo a seguir:
CREATE OR REPLACE TABLE table_name
AS SELECT * FROM parquet.`/path/to/files`
Como a tabela história é mantida 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 as transações simultâneas conforme necessário, sem introduzir comportamento ou resultados inesperados.