DROP ICEBERG TABLE
DROP ICEBERG TABLE
현재/지정된 스키마에서 Apache Iceberg™ 테이블을 제거하되, UNDROP ICEBERG TABLE로 복구할 수 있도록 버전을 보존하는 명령어입니다.
참고: 이 문서에서는 혼동을 피해야 하는 경우를 제외하고 Iceberg 테이블을 단순히 "테이블"이라고 지칭합니다.
출처: 문서
본문
DROP ICEBERG TABLE은 현재/지정된 스키마에서 Apache Iceberg™ 테이블을 제거하되, UNDROP ICEBERG TABLE로 복구할 수 있도록 Iceberg 테이블의 버전을 보존합니다. 관련 명령어로 CREATE ICEBERG TABLE, SHOW ICEBERG TABLES, UNDROP ICEBERG TABLE이 있어요.
구문 (Syntax)
DROP [ ICEBERG ] TABLE [ IF EXISTS ] <name> [ CASCADE | RESTRICT ] [ PURGE ]
파라미터 (Parameters)
- name — 삭제할 테이블의 식별자를 지정합니다. 식별자에 공백, 특수 문자 또는 대소문자 혼합 문자가 포함된 경우 전체 문자열을 큰따옴표로 감싸야 합니다(예:
"My Object"). 큰따옴표로 감싼 식별자는 대소문자를 구분해요. 테이블 식별자가 정규화되지 않았다면(db_name.schema_name.table_name 또는 schema_name.table_name 형태), 명령어는 세션의 현재 스키마에서 테이블을 찾습니다. - CASCADE | RESTRICT — 테이블을 참조하는 외래 키가 존재할 때 테이블을 삭제할 수 있는지 여부를 지정합니다.
CASCADE는 다른 테이블의 외래 키가 참조하는 기본/고유 키가 있는 테이블이어도 삭제합니다.RESTRICT는 기존 외래 키 참조에 대한 경고를 반환하고 테이블을 삭제하지 않습니다.- 기본값:
CASCADE
- PURGE — 카탈로그 연결 데이터베이스의 외부 관리 Iceberg 테이블에 대해 지정하면, 삭제 테이블 요청에서 purge 의도를 외부 Iceberg 카탈로그로 전달합니다. Snowflake는 데이터 파일을 직접 삭제하지 않으며, 외부 카탈로그가 테이블의 기본 데이터와 메타데이터 파일을 스토리지에서 제거합니다. PURGE는 카탈로그 연결 데이터베이스의 외부 관리 Iceberg 테이블에만 사용할 수 있습니다. 외부 관리되지 않은 테이블, 비-Iceberg 테이블, 또는 카탈로그 연결 데이터베이스 밖의 테이블에 사용하면 컴파일 오류가 발생합니다. 각 문에서 PURGE를 지정하는 대안으로, 테이블, 스키마 또는 카탈로그 연결 데이터베이스에
PURGE_ON_DROP_TABLE파라미터를 설정해 모든 DROP TABLE이 자동으로 purge 의도를 카탈로그로 전달하게 할 수 있습니다.
접근 제어 요구 사항 (Access control requirements)
이 작업을 실행하는 역할은 최소한 다음 권한이 있어야 합니다.
| 권한 | 객체 | 참고 |
|---|---|---|
| OWNERSHIP | Iceberg table | 객체에 대한 특별한 권한으로, 객체를 생성한 역할에 자동으로 부여되지만 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 GRANT OWNERSHIP으로 이전할 수 있습니다. |
| USAGE | External volume | |
| USAGE | Integration (catalog) | Iceberg 테이블이 외부 카탈로그를 사용하는 경우 필요합니다. |
스키마 안의 객체를 조작하려면 상위 데이터베이스에 대한 권한이 1개 이상, 상위 스키마에 대한 권한이 1개 이상 필요합니다. 지정된 권한 집합으로 커스텀 역할을 만드는 방법은 Creating custom roles을, securable 객체에 대한 역할과 권한 부여에 관한 일반 정보는 Overview of Access Control을 참고하세요.
사용 참고 사항 (Usage notes)
- 쓰기가 활성화된 외부 관리 Iceberg 테이블이 카탈로그 연결 데이터베이스에 있는 경우, Snowflake는 외부 Iceberg REST 카탈로그에도 테이블 삭제를 지시합니다. Snowflake는 원격 Iceberg 카탈로그를 호출해 테이블 항목을 삭제하도록 지시합니다. 기본적으로 Snowflake는 카탈로그에 테이블의 기본 데이터와 메타데이터 파일을 스토리지에서 삭제하라고 신호하지 않습니다.
- 기본 파일까지 제거하려면 PURGE 키워드를 지정하거나, 테이블, 스키마 또는 카탈로그 연결 데이터베이스에
PURGE_ON_DROP_TABLE파라미터를 설정하세요. purge가 요청되면 Snowflake는 삭제 테이블 요청에서 purge 의도를 카탈로그로 전달합니다. Snowflake는 외부 데이터 파일을 직접 삭제하지 않으며, 실제 파일 삭제는 카탈로그가 담당합니다. - Snowflake는 테이블이 원격 카탈로그에서 성공적으로 삭제된 것을 확인한 후에만 테이블을 삭제합니다.
- 참고: 표준 Snowflake 데이터베이스(카탈로그 연결 데이터베이스가 아님)의 쓰기 가능한 외부 관리 Iceberg 테이블의 경우, DROP ICEBERG TABLE은 Snowflake의 테이블 항목만 제거합니다. 원격 카탈로그에서는 테이블을 삭제하거나 등록 해제하지 않습니다. 원격 카탈로그에서 테이블을 제거하려면 카탈로그 자체의 API나 도구를 사용하세요. 외부 카탈로그로 AWS Glue Data Catalog를 사용하는 경우, 카탈로그는 purge 플래그를 존중하지 않으므로 PURGE를 지정해도 기본 테이블 파일이 유지됩니다. 이 동작은 AWS Glue Data Catalog 구현에만 해당됩니다.
- 테이블, 스키마 또는 카탈로그 연결 데이터베이스에서
PURGE_ON_DROP_TABLE파라미터를 TRUE로 설정하면, 명시적 PURGE 키워드 없이도 모든 DROP TABLE에서 자동으로 purge 의도를 외부 카탈로그로 전달합니다. CREATE OR REPLACE TABLE이 수행하는 암시적 삭제에서도 동일한 purge 의도가 전달됩니다. - 테이블을 삭제해도 시스템에서 영구적으로 제거되지는 않습니다. Snowflake는 테이블의
DATA_RETENTION_TIME_IN_DAYS파라미터로 지정된 일수 동안 삭제된 테이블의 버전을 Time Travel에 보존합니다.- Time Travel 보존 기간 안에는 UNDROP ICEBERG TABLE 명령어로 삭제된 테이블을 복원할 수 있습니다.
- 삭제된 테이블이 완전히 삭제되면 복구할 수 없으며 다시 생성해야 합니다.
- 테이블을 삭제한 후 같은 이름으로 테이블을 생성하면 새 버전의 테이블이 만들어집니다. 이전 테이블의 삭제된 버전은 다음 단계로 복원할 수 있습니다: ① 현재 버전의 테이블 이름 변경, ② UNDROP ICEBERG TABLE 명령어로 이전 버전 복원.
- 테이블을 삭제하기 전에 해당 테이블을 참조하는 뷰가 없는지 확인하세요. 뷰가 참조하는 테이블을 삭제하면 뷰가 무효화됩니다(뷰를 조회하면 "object does not exist" 오류가 반환됨).
IF EXISTS절을 지정하고 대상 객체가 존재하지 않으면, 명령어는 오류를 반환하지 않고 성공적으로 완료됩니다.
예제 (Examples)
테이블을 삭제합니다.
DROP ICEBERG TABLE t2;
+--------------------------+
| status |
|--------------------------|
| T2 successfully dropped. |
+--------------------------+
테이블을 다시 삭제하되, 테이블이 존재하지 않아도 오류를 발생시키지 않습니다.
DROP ICEBERG TABLE IF EXISTS t2;
+------------------------------------------------------------+
| status |
|------------------------------------------------------------|
| Drop statement executed successfully (T2 already dropped). |
+------------------------------------------------------------+
카탈로그 연결 데이터베이스에서 테이블을 삭제하고 purge 의도를 외부 카탈로그로 전달합니다.
DROP ICEBERG TABLE my_catalog_linked_db.public.my_iceberg_table PURGE;
+-----------------------------------------+
| status |
|-----------------------------------------|
| MY_ICEBERG_TABLE successfully dropped. |
+-----------------------------------------+