Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
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 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. |
DROP TABLE a semântica difere entre os tipos de tabela e o Catálogo do Unity mantém um histórico de tabelas 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.
Consulte 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 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`
Importante
CREATE OR REPLACE TABLE não é compatível com tabelas Iceberg gerenciadas pelo Unity Catalog. Em vez disso, use os 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. 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 é uma única transação, portanto, nunca há um 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.
- Se a tabela original incluir máscaras de coluna, essas máscaras serão retidas para todas as colunas que ainda existem na nova tabela. Isso garante que as políticas de acesso a dados sejam preservadas.
Consulte 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 está usando o Catálogo do Unity, mas em todos os tipos de tabela 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.