카탈로그 연결 데이터베이스 수정하기
카탈로그 연결 데이터베이스 수정하기 (ALTER DATABASE (catalog-linked))
이 기능은 중화인민공화국에서는 사용할 수 없어요.
- Apache Iceberg™ tables
- Use a catalog-linked database for Apache Iceberg™ tables
- SYSTEM$CATALOG_LINK_STATUS
- CREATE DATABASE (catalog-linked)
기존 catalog-linked database의 속성을 수정해요.
데이터베이스 수정에는 다음 작업이 포함돼요:
- 자동 검색을 켜거나 끄는 것.
- 허용 및 차단된 네임스페이스를 변경하는 것.
- Snowflake가 원격 카탈로그에서 스키마와 테이블을 자동으로 검색할 때 사용할 시간 간격을 변경하는 것.
- 원격 카탈로그가 읽기 전용인지 쓰기 가능한지 변경하는 것.
출처: 문서
본문
구문
ALTER DATABASE [ IF EXISTS ] RENAME TO
ALTER DATABASE [ IF EXISTS ] SUSPEND DISCOVERY
ALTER DATABASE [ IF EXISTS ] RESUME DISCOVERY
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
ADD ( '' [ , ... ] ) TO ALLOWED_NAMESPACES
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
REMOVE ( '' [ , ... ] ) FROM ALLOWED_NAMESPACES
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
UNSET ALLOWED_NAMESPACES
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
ADD ( '' [ , ... ] ) TO BLOCKED_NAMESPACES
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
REMOVE ( '' [ , ... ] ) FROM BLOCKED_NAMESPACES
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
UNSET BLOCKED_NAMESPACES
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
SET SYNC_INTERVAL_SECONDS =
ALTER DATABASE [ IF EXISTS ] UPDATE LINKED_CATALOG
SET ALLOWED_WRITE_OPERATIONS = { NONE | ALL }
ALTER DATABASE [ IF EXISTS ] SET [ BASE_LOCATION_PREFIX = '' ]
[ COMMENT = '' ]
[ CONTACT = [ , = ... ] ]
[ ICEBERG_VERSION_DEFAULT = ]
[ ICEBERG_MERGE_ON_READ_BEHAVIOR = { 'AUTO' | 'ENABLED' | 'DISABLED' } ]
[ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
ALTER DATABASE [ IF EXISTS ] UNSET { BASE_LOCATION_PREFIX |
COMMENT |
CONTACT |
ICEBERG_VERSION_DEFAULT |
ICEBERG_MERGE_ON_READ_BEHAVIOR |
ENABLE_ICEBERG_MERGE_ON_READ
}
매개 변수
name
변경할 카탈로그 연결 데이터베이스의 식별자를 지정합니다.
식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자는 대소문자를 구분합니다.
자세한 내용은 Identifier requirements를 참조하세요.
RENAME TO new_name
카탈로그 연결 데이터베이스의 이름을 new_name으로 변경합니다. 새 식별자는 계정 내에서 고유해야 합니다.
자세한 내용은 Identifier requirements를 참조하세요.
개체 이름을 변경하면 해당 개체를 참조하는 다른 개체도 새 이름으로 업데이트해야 합니다.
SUSPEND DISCOVERY
자동 검색을 일시 중단합니다. 기본 문제로 인해 Snowflake가 원격 카탈로그의 테이블을 검색하지 못하는 경우 불필요한 크레딧이나 리소스를 소비하지 않도록 자동 검색을 일시 중단할 수 있습니다. 예를 들어 권한 누락이나 잘못된 구성 같은 기본 문제가 있을 때 자동 검색을 일시 중단할 수 있습니다. 문제를 해결한 후에는 ALTER DATABASE ... RESUME DISCOVERY를 실행하여 검색을 재개하세요.
자동 검색이 일시 중단되었는지 확인하려면 SYSTEM$CATALOG_LINK_STATUS 함수를 호출하고 executionState 필드가 SUSPENDED로 설정되어 있는지 확인하세요. 자동 검색을 일시 중단했지만 자동 검색 작업이 현재 실행 중인 경우 작업이 완료될 때까지 실행 상태는 일시 중단으로 변경되지 않습니다.
자동 검색을 일시 중단해도 자동 새로 고침은 꺼지지 않습니다. 기존 Iceberg 테이블의 자동 새로 고침을 끄려면 를 참조하세요.
RESUME DISCOVERY
자동 검색을 재개합니다. 다음과 같은 이유로 검색을 재개할 수 있습니다.
- 문제를 해결하기 위해 검색을 일시 중단했고 이제 검색을 재개할 준비가 되었습니다.
- 수정된 권한과 같은 최근 변경 사항이 반영되도록 즉시 검색 실행을 강제하려고 합니다.
자동 검색이 재개되었는지 확인하려면 SYSTEM$CATALOG_LINK_STATUS 함수를 호출한 다음 executionState 필드가 RUNNING으로 설정되어 있는지 확인하세요.
UPDATE LINKED_CATALOG
카탈로그 연결 데이터베이스에 적용되는 속성을 업데이트합니다. 다음 속성을 설정할 수 있습니다.
ADD ( 'namespace1' [ , 'namespace2' , ... ] ) TO ALLOWED_NAMESPACES
자동 검색 범위를 제한하기 위해 원격 카탈로그의 네임스페이스 하나 이상을 지정합니다. Snowflake는 지정된 네임스페이스와 그 아래에 중첩된 모든 네임스페이스 및 테이블을 동기화합니다.
-
빈 ALLOWED_NAMESPACES 목록으로 카탈로그 연결 데이터베이스를 만든 경우 Snowflake는 원격 카탈로그의 모든 네임스페이스와 테이블을 동기화합니다.
나중에 ALLOWED_NAMESPACES 매개 변수를 지정하여 특정 네임스페이스 목록만 허용하도록 데이터베이스를 변경하면 Snowflake는 카탈로그 연결 데이터베이스를 업데이트하여 허용한 네임스페이스만 유지합니다. 다른 모든 네임스페이스와 테이블은 카탈로그 연결 데이터베이스에서 삭제됩니다.
-
ALLOWED_NAMESPACES 목록으로 카탈로그 연결 데이터베이스를 만든 경우 Snowflake는 허용된 네임스페이스만 카탈로그 연결 데이터베이스에 생성합니다.
나중에 ALLOWED_NAMESPACES 목록에 네임스페이스를 추가하도록 데이터베이스를 변경하면 Snowflake는 새로 추가된 네임스페이스만 생성하고 기존 허용 네임스페이스는 유지합니다. ALLOWED_NAMESPACES 목록에서 네임스페이스를 제거하면 Snowflake는 새로 제거된 네임스페이스만 카탈로그 연결 데이터베이스에서 삭제하고 나머지 허용 네임스페이스는 모두 유지합니다.
중첩된 네임스페이스가 ALLOWED_NAMESPACES 목록에 있지만 NAMESPACE_MODE 매개 변수를 IGNORE_NESTED_NAMESPACE로 설정한 경우 Snowflake는 해당 중첩 네임스페이스나 그 아래의 스키마 및 테이블을 동기화하지 않습니다.
REMOVE ( 'namespace1' [ , 'namespace2' , ... ] ) FROM ALLOWED_NAMESPACES
허용 네임스페이스 목록에서 제거할 원격 카탈로그의 네임스페이스 하나 이상을 지정합니다.
UNSET ALLOWED_NAMESPACES
허용 네임스페이스 목록을 기본값(모든 네임스페이스 허용)으로 해제합니다.
ADD ( 'namespace1' [ , 'namespace2' , ... ] ) TO BLOCKED_NAMESPACES
자동 검색에서 차단할 원격 카탈로그의 네임스페이스 하나 이상을 지정합니다.
Snowflake는 지정된 네임스페이스와 그 아래에 중첩된 모든 네임스페이스 및 테이블을 차단합니다.
ALLOWED_NAMESPACES와 BLOCKED_NAMESPACES를 모두 지정하면 BLOCKED_NAMESPACES 목록이 우선합니다. 예를 들어 ns1.ns2가 허용되지만 ns1이 차단된 경우 Snowflake는 ns1.ns2를 동기화하지 않습니다.
REMOVE ( 'namespace1' [ , 'namespace2' , ... ] ) FROM BLOCKED_NAMESPACES
차단 네임스페이스 목록에서 제거할 원격 카탈로그의 네임스페이스 하나 이상을 지정합니다.
UNSET BLOCKED_NAMESPACES
차단 네임스페이스 목록을 기본값(차단된 네임스페이스 없음)으로 해제합니다.
SET SYNC_INTERVAL_SECONDS = value
Snowflake가 원격 카탈로그의 스키마와 테이블을 자동으로 검색하는 데 사용할 시간 간격(초)을 지정합니다. 시간 간격을 더 길게 설정하면 크레딧 소비를 줄일 수 있습니다.
값: 30~86400(1일), 경계 값 포함
기본값: 30초
SET ALLOWED_WRITE_OPERATIONS = { NONE | ALL }
카탈로그 연결 데이터베이스가 읽기 전용인지 쓰기 가능한지 지정합니다.
NONE: 카탈로그 연결 데이터베이스가 읽기 전용입니다.
카탈로그 연결 데이터베이스가 읽기 전용이면 카탈로그에 커밋해야 하는 작업은 모두 실패합니다. 예를 들어 DROP ICEBERG TABLE이 있습니다.
ALL: 카탈로그 연결 데이터베이스가 쓰기 가능합니다.
카탈로그 연결 데이터베이스에 쓰기 권한이 활성화되면 Snowflake는 테이블 삭제를 원격 카탈로그에 전파하여 두 시스템 모두에서 테이블과 데이터를 제거합니다.
중첩 네임스페이스의 테이블 생성 및 쓰기는 카탈로그 연결 데이터베이스가 중첩 네임스페이스를 지원하는 카탈로그에 대해 카탈로그 통합을 사용하는 경우에만 지원됩니다. 자세한 내용은 를 참조하세요.
기본값: ALL
SET ...
카탈로그 연결 데이터베이스에 설정할 하나 이상의 속성 또는 매개변수를 지정합니다. 속성 또는 매개변수는 공백, 쉼표 또는 줄바꿈으로 구분합니다:
BASE_LOCATION_PREFIX = 'string'
외부 관리 %iceberg-tm% 테이블의 쓰기 경로에서 Snowflake가 사용할 접두사를 지정합니다. 자세한 내용은 Data and metadata directories for Iceberg tables 및 BASE_LOCATION_PREFIX를 참조하세요.
기본값: 값 없음
COMMENT = 'string_literal'
카탈로그 연결 데이터베이스에 주석을 추가하거나 기존 주석을 덮어씁니다.
CONTACT purpose = contact [ , purpose = contact ... ]
기존 개체를 하나 이상의 contacts와 연결합니다. 유효한 용도 목록은 를 참조하세요.
같은 문에서 CONTACT 속성을 다른 속성과 함께 설정할 수 없습니다.
ICEBERG_VERSION_DEFAULT = integer
Iceberg 테이블이 준수하는 %iceberg-tm% 테이블 사양의 버전을 지정합니다.
값:
2: 새 테이블은 Iceberg 버전 2를 준수합니다.
3: 새 테이블은 Iceberg 버전 3을 준수합니다.
다른 엔진을 사용하여 테이블 속성의 Iceberg 테이블 format-version을 v3로 업그레이드하기 전에, 해당 테이블이 아직 v3를 지원하지 않는 엔진이나 애플리케이션에서 사용되지 않는지 확인하세요. Apache Iceberg 사양에서는 format 버전 다운그레이드를 지원하지 않습니다. 따라서 모든 읽기 및 쓰기 엔진이 v3를 지원해야 합니다. Snowflake에서 Iceberg 테이블의 기본 버전은 v2이며, 필요한 경우 v3로 구성할 수 있습니다. 현재 Snowflake를 사용한 제자리 버전 업그레이드는 지원되지 않습니다.
기본값:
2
ICEBERG_MERGE_ON_READ_BEHAVIOR = { 'AUTO' | 'ENABLED' | 'DISABLED' }
Snowflake가 %iceberg-tm% 테이블에서 행 수준 업데이트(UPDATE, DELETE, MERGE)를 수행하는 방식을 지정합니다. merge-on-read(데이터와 함께 Iceberg delete 파일을 작성)와 copy-on-write(전체 데이터 파일을 다시 작성) 중에서 선택합니다.
매개변수 값은 대소문자를 구분하지 않습니다.
값:
'AUTO': Snowflake는 테이블의 Iceberg format 버전과 관리 모드에 따라 merge-on-read 또는 copy-on-write를 선택합니다. 자세한 내용은 를 참조하세요.
'ENABLED': 이 매개변수가 적용되는 모든 %iceberg-tm% 테이블에서 format 버전이나 관리 모드와 관계없이 merge-on-read가 활성화됩니다.
'DISABLED': 이 매개변수가 적용되는 모든 %iceberg-tm% 테이블에서 merge-on-read가 비활성화됩니다. 모든 DML은 copy-on-write를 사용합니다.
기본값:
'AUTO'
이 매개변수에 대한 자세한 설명은 를 참조하세요. Snowflake의 merge-on-read 및 copy-on-write 동작에 대한 자세한 내용은 를 참조하세요.
ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE }
이 매개변수는 더 이상 사용되지 않습니다(비권장). 대신 ICEBERG_MERGE_ON_READ_BEHAVIOR를 사용하세요. 레거시 매개변수는 ICEBERG_MERGE_ON_READ_BEHAVIOR가 기본값('AUTO')일 때 여전히 적용되지만, 향후 릴리스에서는 오류를 반환할 예정입니다.
%iceberg-tm% 테이블에 대해 merge-on-read 동작을 활성화할지 여부를 지정합니다.
값:
TRUE: 새 테이블은 merge-on-read 동작을 사용합니다. v2 테이블의 경우 Snowflake는 행 수준 삭제에 positional delete 파일을 사용합니다. v3 테이블의 경우 조건이 충족되면 Snowflake는 deletion vectors를 사용합니다.
참고: 이 매개변수를 TRUE로 설정해도 Snowflake 관리 v2 Iceberg 테이블에서는 merge-on-read가 활성화되지 않습니다. ICEBERG_MERGE_ON_READ_BEHAVIOR가 기본값('AUTO')인 경우 이 설정은 자동 매트릭스를 통해 처리되므로 Snowflake 관리 v2 테이블은 copy-on-write로 유지됩니다. Snowflake 관리 v2 테이블에서 merge-on-read를 활성화하려면 ICEBERG_MERGE_ON_READ_BEHAVIOR = 'ENABLED'를 명시적으로 설정하세요.
FALSE: 새 테이블은 copy-on-write 동작을 사용합니다.
기본값:
TRUE
이 매개변수에 대한 자세한 설명은 를 참조하세요. Snowflake의 merge-on-read 및 copy-on-write 동작에 대한 자세한 내용은 를 참조하세요.
UNSET ...
데이터베이스에서 설정 해제할 하나 이상의 속성 또는 매개변수를 지정합니다. 이렇게 하면 기본값으로 재설정됩니다:
BASE_LOCATION_PREFIXCOMMENTCONTACTICEBERG_VERSION_DEFAULTICEBERG_MERGE_ON_READ_BEHAVIORENABLE_ICEBERG_MERGE_ON_READ
액세스 제어 요구 사항
이 작업을 실행하는 데 사용되는 role은 최소한 다음 privileges을 보유해야 합니다:
| 권한 | 개체 | 참고 |
|---|---|---|
| OWNERSHIP | 수정 중인 카탈로그 연결 데이터베이스. | 자동 테이블 검색을 일시 중단하거나 재개하는 데 필요합니다. |
| OWNERSHIP 또는 MODIFY | 수정 중인 카탈로그 연결 데이터베이스. | 다른 모든 작업에 필요합니다. |
지정된 권한 집합을 가진 사용자 지정 역할을 만드는 방법은 를 참조하세요.
보안 개체(securable objects)에 대해 SQL 작업을 수행하기 위한 역할 및 권한 부여에 대한 일반적인 내용은 Overview of Access Control를 참조하세요.
예제
my_linked_db라는 카탈로그 연결 데이터베이스의 허용된 네임스페이스 목록을 기본값으로 재설정합니다.
ALTER DATABASE IF EXISTS my_linked_db UPDATE LINKED_CATALOG
UNSET ALLOWED_NAMESPACES;
my_linked_db라는 카탈로그 연결 데이터베이스의 허용된 네임스페이스 목록에 my_namespace를 추가해요.
ALTER DATABASE IF EXISTS my_linked_db UPDATE LINKED_CATALOG
ADD ('my_namespace') TO ALLOWED_NAMESPACES;