카테고리:

테이블, 뷰 및 시퀀스 DDL

DROP TABLE

현재/지정된 스키마에서 테이블을 제거하지만, UNDROP TABLE 을 사용하여 복구할 수 있도록 테이블 버전을 유지합니다. 자세한 내용은 이 항목에 있는 사용법 노트 섹션을 참조하십시오.

참고 항목:

CREATE TABLE , ALTER TABLE , SHOW TABLES , TRUNCATE TABLE , DESCRIBE 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

사용법 노트

  • 테이블을 삭제해도 시스템에서 영구적으로 제거되지는 않습니다. 삭제된 테이블의 버전은 테이블에 대한 DATA_RETENTION_TIME_IN_DAYS 매개 변수로 지정된 일수 동안 Time Travel 에 보존됩니다.

    1. Time Travel 보존 기간 이내에, UNDROP TABLE 명령을 사용하여 삭제된 테이블을 복원할 수 있습니다.

    2. Time Travel 보존 기간이 끝날 때, 삭제된 테이블의 다음 상태는 이 스키마가 영구적, 일시적 또는 임시적인지에 따라 달라집니다.

      • 영구 테이블은 Fail-safe 로 이동합니다. Fail-safe(7일)에서는 삭제된 테이블을 복구할 수 있지만, Snowflake에서만 가능합니다. 테이블이 Fail-safe 상태를 벗어나면 제거됩니다.

      • 일시적 테이블 또는 임시 테이블은 Fail-safe가 없으므로, Time Travel에서 벗어날 때 제거됩니다.

      참고

      장시간 실행 중인 Time Travel 쿼리가 있으면 이 쿼리가 완료될 때까지 계정의 모든 데이터와 오브젝트(테이블, 스키마, 데이터베이스)가 Fail-safe로 이동하는 과정이 지연됩니다. 임시 테이블과 일시적 테이블의 제거도 비슷하게 지연됩니다.

    3. 삭제된 테이블은 제거된 후에는 복구할 수 없으며, 다시 만들어야 합니다.

  • 테이블을 삭제한 후, 같은 이름의 테이블을 만들면 새 버전의 테이블이 생성됩니다. 이전 테이블의 삭제된 버전은 여전히 다음 방법을 사용해 복원할 수 있습니다.

    1. 현재 버전의 테이블 이름을 다른 이름으로 바꿉니다.

    2. 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). |
+------------------------------------------------------------+
맨 위로 이동