DROP TABLE¶
从当前/指定的架构中移除表,但保留该表的某个版本,以便可以使用 UNDROP TABLE 将表恢复。有关详细信息,请参阅 ` 使用说明 `_ (本主题内容)。
语法¶
DROP TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
参数¶
name
指定要删除的表的标识符。如果标识符包含空格、特殊字符或大小写混合字符,则整个字符串必须放在双引号内。放在双引号内的标识符也区分大小写(例如,
"My Object"
)。如果表标识符不是完全限定的(以
db_name.schema_name.table_name
或schema_name.table_name
的形式),则该命令将在会话的当前架构中查找表。CASCADE | RESTRICT
指定如果存在引用该表的外键,是否可以删除该表:
即使表具有被其他表中的外键引用的主键/唯一键,
CASCADE
也会删除该表。RESTRICT
会返回有关现有外键引用的警告,并且不会删除该表。
默认:
CASCADE
使用说明¶
删除表不会将其从系统中永久移除。Time Travel 中会保留已删除表的版本,而保留天数由该表的 数据保留期 指定:
在 Time Travel 保留期内,可以使用 UNDROP TABLE 命令还原已删除的表。
在表被删除 后,更改账户或父对象(即数据库或架构)的 Time Travel 保留期不会更改删除表的 Time Travel 保留期。有关详细信息,请参阅 Time Travel 主题中的注释。
当 Time Travel 保留期结束时,已删除表的下一个状态取决于它是永久的、瞬态的还是临时的:
永久表将进入 故障安全 状态。在故障安全状态下(为期 7 天),可以恢复已删除的表,但只能由 Snowflake 恢复。当表退出故障安全状态后,它将被清除。
瞬态或临时表没有故障安全状态,因此当它移出 Time Travel 后会被清除。
备注
长时间运行的 Time Travel 查询将延迟将账户中的任何数据和对象(表、架构和数据库)移动到故障安全,直到查询完成。临时表和瞬态表的清除也将同样延迟。
已删除的表一经清除便无法恢复,只能重新创建。
删除表后,创建同名表将会创建该表的新版本。仍然可以使用以下方法还原先前表的已删除版本:
将表的当前版本重命名为其他名称。
使用 UNDROP TABLE 命令还原先前的版本。
在删除表之前,请验证 没有 视图引用该表。删除视图引用的表会使视图失效(即查询视图会返回“对象不存在”错误)。
要删除表,您必须使用具有该表所有权权限的角色。
示例¶
删除表:
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 | |------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------| +------------+------+---------------+-------------+------+---------+------------+------+-------+-------+----------------+
再次删除该表,但如果该表不存在,则不会引发错误:
DROP TABLE IF EXISTS t2; +------------------------------------------------------------+ | status | |------------------------------------------------------------| | Drop statement executed successfully (T2 already dropped). | +------------------------------------------------------------+