Pular para o conteúdo principal

Derrubar ou substituir uma mesa Delta

Databricks suporta o comando DDL padrão SQL para descartar e substituir tabelas registradas com Unity Catalog ou 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 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 diferem entre os tipos de tabela, e o site Unity Catalog mantém um histórico das tabelas Delta usando uma ID de tabela interna. No entanto, todas as tabelas compartilham o resultado comum de que, após a conclusão das operações, o nome da tabela registrada anteriormente não tem mais um link ativo para os dados e o histórico da tabela do 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 das instruções CREATE OR REPLACE TABLE para casos de uso em que o senhor deseja substituir totalmente a tabela de destino por novos dados. Por exemplo, para sobrescrever uma tabela Delta com todos os dados de um diretório Parquet, o senhor 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 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 o senhor está usando tabelas gerenciar ou externas e se está usando Unity Catalog, mas em todos os tipos de tabela Delta o uso desse padrão pode resultar em 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 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.