DROP SCHEMA
DROP SCHEMA
현재/지정된 데이터베이스에서 스키마(schema)를 제거하는 명령이에요. 삭제된 스키마는 Time Travel 기간 동안 복원할 수 있어요.
출처: 문서
본문
구문 (Syntax)
DROP SCHEMA [ IF EXISTS ] <name> [ CASCADE | RESTRICT ]
파라미터
- name — 삭제할 스키마의 식별자를 지정해요. 식별자에 공백, 특수 문자, 또는 대소문자 혼합 문자가 포함되면 전체 문자열을 큰따옴표로 묶어야 해요. 큰따옴표로 묶은 식별자는 대소문자를 구분해요. 스키마 식별자가 정규화되지 않았다면(즉
db_name.schema_name형식이 아니라면), 명령은 세션의 현재 데이터베이스에서 스키마를 찾아요. - CASCADE | RESTRICT — 스키마의 테이블을 참조하는 외래 키가 존재할 때 스키마를 삭제할 수 있는지 여부를 지정해요:
CASCADE— 스키마와 스키마 안의 모든 객체(다른 테이블의 외래 키가 참조하는 기본/고유 키가 있는 테이블 포함)를 삭제해요.RESTRICT— 기존 외래 키 참조에 대한 경고를 반환하고 스키마를 삭제하지 않아요.- 기본값:
CASCADE
사용 메모 (Usage notes)
- 스키마를 삭제해도 시스템에서 영구적으로 제거되지는 않아요. 삭제된 스키마의 버전은 스키마의
DATA_RETENTION_TIME_IN_DAYS파라미터가 지정한 일수만큼 Time Travel에 유지돼요. Time Travel 보존 기간 내에서는UNDROP SCHEMA명령으로 삭제된 스키마를 복원할 수 있어요. - Time Travel 보존 기간이 끝나면, 삭제된 스키마의 다음 상태는 영구(permanent)인지 임시(transient)인지에 따라 달라져요.
- 영구 스키마는 Fail-safe로 이동해요. Fail-safe(7일)에서 삭제된 스키마는 Snowflake만 복구할 수 있어요. 스키마가 Fail-safe를 벗어나면 제거(purge)돼요.
- 임시 스키마는 Fail-safe가 없으므로 Time Travel을 벗어나면 제거돼요.
- 삭제된 스키마가 제거된 후에는 복구할 수 없으므로 다시 만들어야 해요.
- 현재 스키마가 삭제될 때, 하위 테이블의 데이터 보존 기간이 스키마와 다르게 명시적으로 설정되어 있더라도 그 기간이 존중되지 않아요. 하위 테이블은 스키마와 동일한 기간 동안 유지돼요. 이 테이블들의 데이터 보존 기간을 존중하려면 스키마를 삭제하기 전에 명시적으로 삭제해야 해요.
- 스키마를 삭제한 후 같은 이름으로 스키마를 만들면 새 버전의 스키마가 생성돼요. 이전 버전의 삭제된 스키마는 다음 방법으로 복원할 수 있어요:
- 현재 버전의 스키마를 다른 이름으로 변경해요.
UNDROP SCHEMA명령으로 이전 버전을 복원해요.
- 쓰기가 허용되는 카탈로그 연결(catalog-linked) 데이터베이스에서 이 명령은 카탈로그 연결 데이터베이스에서 스키마를, 원격 카탈로그의 해당 네임스페이스를 동시에 삭제해요. 중첩 네임스페이스 삭제는 카탈로그 연결 데이터베이스가 중첩 네임스페이스를 지원하는 카탈로그에 대한 카탈로그 통합(catalog integration)을 사용할 때만 지원돼요. 다른 REST 카탈로그에서는 최상위 네임스페이스만 삭제할 수 있어요.
- 정책이나 태그가 테이블/뷰 열에 연결되어 있으면, 스키마 삭제가 성공하려면 해당 정책이나 태그가 데이터베이스와 스키마 내에 자체 포함(self-contained)되어야 해요. 예를 들어 database_1이 policy_1을 포함하고 policy_1이 database_1에서만 사용되면 돼요. 그렇지 않으면 매달린 참조(dangling reference)가 발생해요.
- 사용자나 계정에 세션 정책(session policy) 또는 비밀번호 정책(password policy)이 설정되어 있으면 DROP 작업은 실패해요.
IF EXISTS절을 지정했을 때 대상 객체가 존재하지 않으면, 명령은 오류를 반환하지 않고 성공적으로 완료돼요.
중요: 스키마에 보존 잠금(retention lock)이 있는 스냅샷 정책이 연결된 스냅샷 세트가 포함되어 있고, 스냅샷 세트에 만료되지 않은 스냅샷이 있으면, 그 스냅샷 세트가 포함된 스키마를 삭제할 수 없어요. 이 경우 세트의 모든 스냅샷이 만료될 때까지 기다려야 해요. 이 제한은 ACCOUNTADMIN과 같은 권한 있는 역할과 Snowflake 지원에도 적용돼요. 따라서 스냅샷 정책에서 보존 잠금과 긴 만료 기간을 지정할 때 주의해야 해요.
예시 (Examples)
myschema라는 스키마를 삭제해요:
DROP SCHEMA myschema;
+--------------------------------+
| status |
|--------------------------------|
| MYSCHEMA successfully dropped. |
+--------------------------------+
SHOW SCHEMAS;
+---------------------------------+--------------------+------------+------------+---------------+--------+-----------------------------------------------------------+---------+----------------+
| created_on | name | is_default | is_current | database_name | owner | comment | options | retention_time |
|---------------------------------+--------------------+------------+------------+---------------+--------+-----------------------------------------------------------+---------+----------------|
| Fri, 13 May 2016 17:26:07 -0700 | INFORMATION_SCHEMA | N | N | MYTESTDB | | Views describing the contents of schemas in this database | | 1 |
| Tue, 17 Mar 2015 16:57:04 -0700 | PUBLIC | N | Y | MYTESTDB | PUBLIC | | | 1 |
+---------------------------------+--------------------+------------+------------+---------------+--------+-----------------------------------------------------------+---------+----------------+