DROP TABLE

Remove uma tabela do esquema atual ou especificado, mas retém uma versão da tabela para que ela possa ser recuperada usando UNDROP TABLE. Consulte mais informações nas /sql-reference/sql/undrop-table`Notas de uso.

Consulte também:

CREATE TABLE , ALTER TABLE , SHOW TABLES , TRUNCATE TABLE , DESCRIBE TABLE

Sintaxe

DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
Copy

Parâmetros

name

Especifica o identificador da tabela a ser descartada. Se o identificador contiver espaços, caracteres especiais ou caracteres com letras maiúsculas e minúsculas, toda a cadeia de caracteres deve ser delimitada por aspas duplas. Os identificadores delimitados por aspas duplas também diferenciam letras maiúsculas de minúsculas (por exemplo, "My Object").

Se o identificador da tabela não estiver totalmente qualificado (na forma de db_name.schema_name.table_name ou schema_name.table_name), o comando procura a tabela no esquema atual para a sessão.

CASCADE | RESTRICT

Especifica se a tabela pode ser descartada caso existam chaves estrangeiras que façam referência à tabela:

  • CASCADE: descarta a tabela mesmo que a tabela tenha chaves primárias/únicas que são referenciadas por chaves estrangeiras em outras tabelas.

  • RESTRICT: retorna um aviso sobre as referências de chave estrangeiras existentes e não descarta a tabela.

Padrão: CASCADE para tabelas padrão; RESTRICT para tabelas híbridas. Consulte também Descarte de tabelas híbridas.

Requisitos de controle de acesso

A função usada para executar essa operação deve ter, no mínimo, os seguintes privilégios:

Privilégio

Objeto

Notas

OWNERSHIP

Tabela

OWNERSHIP is a special privilege on an object that is automatically granted to the role that created the object, but can also be transferred using the GRANT OWNERSHIP command to a different role by the owning role (or any role with the MANAGE GRANTS privilege).

Para instruções sobre como criar uma função personalizada com um conjunto específico de privilégios, consulte Criação de funções personalizadas.

Para informações gerais sobre concessões de funções e privilégios para executar ações de SQL em objetos protegíveis, consulte Visão geral do controle de acesso.

Notas de uso

  • O descarte de uma tabela não a remove permanentemente do sistema. Uma versão da tabela descartada é mantida no Time Travel pelo número de dias especificado pelo período de retenção de dados para a tabela:

    • Dentro do período de retenção do Time Travel, você pode restaurar uma tabela descartada usando o comando UNDROP TABLE.

    • Alterar o período de retenção do Time Travel para a conta ou para um objeto pai (ou seja, banco de dados ou esquema) após o descarte de uma tabela não altera o período de retenção do Time Travel para a tabela descartada. Para obter mais informações, consulte a observação no tópico Time Travel.

    • Quando o período de retenção do Time Travel terminar, o próximo estado para a tabela descartada dependerá se ela é permanente, transitória ou temporária:

      • Uma tabela permanente é movida para o Fail-safe. No Fail-safe (7 dias), uma tabela descartada pode ser recuperada, mas somente pelo Snowflake. Quando a tabela deixa o Fail-safe, ela é purgada.

      • Uma tabela transitória ou temporária não tem Fail-safe, por isso é purgada quando sai do Time Travel.

        Nota

        Uma consulta de longo prazo do Time Travel atrasa a movimentação de quaisquer dados e objetos (tabelas, esquemas e bancos de dados) da conta para o Fail-safe, até que a consulta seja concluída. A purga das tabelas temporárias e transitórias é atrasada da mesma forma.

      • Depois que a tabela descartada é eliminada, ela não pode ser recuperada; ele deve ser recriado.

  • Depois de descartar uma tabela, criar uma tabela com o mesmo nome cria uma nova versão da tabela. Você ainda pode restaurar a versão descartada da tabela anterior seguindo estas etapas:

    1. Renomeie a versão atual da tabela.

    2. Use o comando UNDROP TABLE para restaurar a versão anterior da tabela.

  • Antes de descartar uma tabela, verificar se nenhuma visualização faz referência à tabela. Descartar uma tabela referenciada por uma visualização invalida a visualização (ou seja, consultar a visualização retorna um erro “objeto não existe”).

  • Para descartar uma tabela, é necessário usar uma função que tenha o privilégio OWNERSHIP sobre a tabela.

  • Quando a cláusula IF EXISTS é especificada e o objeto de destino não existe, o comando é concluído com sucesso sem retornar um erro.

Descarte de tabelas híbridas

Ao descartar uma tabela híbrida sem especificar a opção RESTRICT ou CASCADE, e a tabela híbrida tiver um relacionamento de chave primária/chave estrangeira ou chave exclusiva/chave estrangeira com outra tabela, o comando DROP falha com um erro. O comportamento padrão é RESTRICT.

Por exemplo:

CREATE OR REPLACE HYBRID TABLE ht1(
  col1 NUMBER(38,0) NOT NULL,
  col2 NUMBER(38,0) NOT NULL,
  CONSTRAINT pkey_ht1 PRIMARY KEY (col1, col2));

CREATE OR REPLACE HYBRID TABLE ht2(
  cola NUMBER(38,0) NOT NULL,
  colb NUMBER(38,0) NOT NULL,
  colc NUMBER(38,0) NOT NULL,
  CONSTRAINT pkey_ht2 PRIMARY KEY (cola),
  CONSTRAINT fkey_ht1 FOREIGN KEY (colb, colc) REFERENCES ht1(col1,col2));

DROP TABLE ht1;
Copy
SQL compilation error:
Cannot drop the table because of dependencies

O comando DROP TABLE falha nesse caso. Se necessário, você pode substituir o comportamento padrão especificando CASCADE no comando DROP TABLE.

DROP TABLE ht1 CASCADE;
Copy

Como alternativa, nesse caso, você poderia descartar a tabela dependente ht2 primeiro e, em seguida, descartar a tabela ht1.

Exemplos

Descartar uma tabela:

SHOW TABLES LIKE 't2%';

+---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+
| created_on                      | name | database_name | schema_name | kind      | comment    | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+
| Tue, 17 Mar 2015 16:48:16 -0700 | T2   | TESTDB        | PUBLIC      | TABLE     |            |            |    5 | 4096  | PUBLIC       |              1 |
+---------------------------------+------+---------------+-------------+-----------+------------+------------+------+-------+--------------+----------------+

DROP TABLE t2;

+--------------------------+
| status                   |
|--------------------------|
| T2 successfully dropped. |
+--------------------------+

SHOW TABLES LIKE 't2%';

+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
|------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------|
+------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
Copy

Descartar a tabela novamente, mas não relatar um erro se a tabela não existir:

DROP TABLE IF EXISTS t2;

+------------------------------------------------------------+
| status                                                     |
|------------------------------------------------------------|
| Drop statement executed successfully (T2 already dropped). |
+------------------------------------------------------------+
Copy