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 ]
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
ouschema_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:
Renomeie a versão atual da tabela.
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;
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;
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 | |------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------| +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
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). | +------------------------------------------------------------+