CREATE DATABASE(카탈로그 연결)¶
외부 Iceberg REST 카탈로그를 사용하는 Apache Iceberg™ 테이블을 위해 새로운 카탈로그 연결 데이터베이스 를 만듭니다.
구문¶
CREATE DATABASE <name>
LINKED_CATALOG = ( catalogParams ),
[ EXTERNAL_VOLUME = '<external_vol>' ]
[ COMMENT = '<string_literal>' ]
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
여기서
catalogParams ::= CATALOG = '<catalog_int>', [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ] [ NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE } ] [ NAMESPACE_FLATTEN_DELIMITER = '<string_literal>' ] [ SYNC_INTERVAL_SECONDS = <value> ]
필수 매개 변수¶
name
카탈로그 연결 데이터베이스의 식별자를 지정하며, 계정에 고유한 식별자여야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object"
)로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
선택적 매개 변수¶
EXTERNAL_VOLUME = my_external_vol
원격 Iceberg 테이블의 데이터 및 메타데이터에 대한 액세스를 제공하는 외부 볼륨 을 지정합니다.
판매되는 자격 증명 을 사용하는 경우 필요하지 않습니다.
COMMENT = 'string_literal'
데이터베이스에 대한 설명을 지정합니다.
기본값: 값 없음
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트에 대한 태그 할당량 섹션을 참조하십시오.
카탈로그 매개변수(catalogParams)¶
CATALOG = catalog_int
카탈로그 통합의 이름을 지정합니다.
ALLOWED_NAMESPACES = ('namespace1', 'namespace2', ... )
선택적으로 원격 카탈로그에서 하나 이상의 네임스페이스를 지정하여 자동 테이블 검색 범위를 제한할 수 있습니다. Snowflake는 지정된 네임스페이스와 하위 계층 구조를 이루는 모든 네임스페이스 및 테이블을 동기화합니다. 중첩 네임스페이스가 ALLOWED_NAMESPACES 목록에 포함되어 있지만 NAMESPACE_MODE 매개변수를 IGNORE_NESTED_NAMESPACE로 설정하면, Snowflake는 해당 중첩 네임스페이스 및 하위 스키마와 테이블을 동기화하지 않습니다.
BLOCKED_NAMESPACES = ('namespace1', 'namespace2', ... )
선택적으로 원격 카탈로그에서 자동 테이블 검색을 차단할 하나 이상의 네임스페이스를 지정합니다.
Snowflake는 지정된 네임스페이스와 하위 네임스페이스 및 테이블을 모두 차단합니다.
ALLOWED_NAMESPACES와 BLOCKED_NAMESPACES를 모두 지정할 경우, BLOCKED_NAMESPACES 목록이 우선 적용됩니다. 예를 들어,
ns1.ns2
는 허용되지만ns1
은 차단된 경우, Snowflake는ns1.ns2
를 동기화하지 않습니다.NAMESPACE_MODE = { IGNORE_NESTED_NAMESPACE | FLATTEN_NESTED_NAMESPACE }
Snowflake가 카탈로그 연결 데이터베이스의 Iceberg 테이블 네임스페이스를 처리하는 방식을 지정합니다.
IGNORE_NESTED_NAMESPACE
: Snowflake는 카탈로그의 첫 번째 네임스페이스 수준에 있는 테이블만 연결합니다.FLATTEN_NESTED_NAMESPACE
: Snowflake는 카탈로그의 모든 네임스페이스 수준에서 테이블을 연결합니다. 중첩된 네임스페이스에 있는 테이블의 경우 Snowflake는 NAMESPACE_FLATTEN_DELIMITER 매개 변수를 사용하여 평면화된 네임스페이스를 구성합니다. 이 옵션을 사용하려면 NAMESPACE_FLATTEN_DELIMITER 매개 변수를 설정해야 합니다.예를 들어,
namespace3aa
네임스페이스에 있는iceberg_table_5
테이블을 사용해 봅니다.my_catalog_linked_db |-- namespace3 | |-- namespace3a | |-- namespace3aa | |-- iceberg_table_5
NAMESPACE_FLATTEN_DELIMITER = "/"
를 설정하면 테이블을 참조하기 위해"my_catalog_linked_db"."namespace3/namespace3a/namespace3aa"."iceberg_table_5"
를 지정할 수 있습니다.
기본값:
IGNORE_NESTED_NAMESPACE
NAMESPACE_FLATTEN_DELIMITER = 'string_literal'
NAMESPACE_MODE를 FLATTEN_NESTED_NAMESPACE로 설정할 경우 필수입니다. Snowflake가 카탈로그 내 테이블에 대해 평탄화된 네임스페이스를 구성하는 데 사용하는 구분자를 지정합니다.
중요
구분자로 선택한 문자는 원격 네임스페이스에 나타날 수 없습니다. 자동 검색 프로세스 중에 Snowflake는 구분 기호가 포함된 네임스페이스를 건너뛰고 카탈로그 연결 데이터베이스에 해당 스키마를 생성하지 않습니다.
유효한 문자: Snowflake 식별자 에서 허용되는 모든 문자
SYNC_INTERVAL_SECONDS = 'value'
Snowflake가 원격 카탈로그에서 스키마와 테이블을 자동으로 검색하는 데 사용할 시간 간격(초)을 지정합니다.
값: 30~86,400(1일)
기본값: 30초
액세스 제어 요구 사항¶
이 작업을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
CREATE DATABASE |
계정 |
새 데이터베이스를 만드는 데 필요합니다. Only the SYSADMIN role, or a higher role, has this privilege by default. The privilege can be granted to additional roles as needed. |
USAGE |
외부 볼륨 |
기존 외부 볼륨을 참조하는 데 필요합니다. |
USAGE |
카탈로그 통합 |
기존 카탈로그 통합을 참조하는 데 필요합니다. |
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
Iceberg REST용 카탈로그 통합을 사용하는 경우에만 지원됩니다(예: Snowflake Open Catalog).
청구: 미리 보기 기간 동안 Snowflake는 카탈로그 연결 데이터베이스에 대해 요금을 청구하지 않습니다. 청구는 Apache Iceberg™ 카탈로그 연결 데이터베이스가 일반 공급으로 제공되는 시점에 시작됩니다.
자동 테이블 검색을 특정 네임스페이스 세트로 제한하려면 ALLOWED_NAMESPACES 매개 변수를 사용합니다. BLOCKED_NAMESPACES 매개 변수를 사용하여 네임스페이스 세트를 차단할 수도 있습니다.
Snowflake는 원격 카탈로그 액세스 제어(사용자 또는 역할)를 동기화하지 않습니다.
카탈로그 연결 데이터베이스에서 스키마 또는 외부에서 관리 Iceberg 테이블을 생성할 수 있습니다. 다른 Snowflake 오브젝트 생성은 현재 지원되지 않습니다.
대기 시간:
원격 카탈로그에서 7,500개의 네임스페이스에 연결된 데이터베이스의 경우 네임스페이스 및 테이블 검색에는 약 1시간이 걸립니다.
500,000개의 테이블이 있는 원격 카탈로그의 경우 자동 새로 고침 프로세스를 완료하는 데 약 1시간이 걸립니다. 대기 시간 요구 사항이 다른 네임스페이스의 경우 별도의 카탈로그 연결 데이터베이스를 만드는 것이 좋습니다. 각 데이터베이스는 적절한 자동 새로 고침 간격(REFRESH_INTERVAL_SECONDS)으로 카탈로그 통합을 참조해야 합니다.
카탈로그 연결 데이터베이스의 Iceberg 테이블의 경우:
Snowflake는 원격 카탈로그 테이블 속성(예: 보존 정책 또는 버퍼)을 복사하지 않으며, 현재 테이블 속성 변경을 지원하지 않습니다.
자동 새로 고침 은 기본적으로 활성화됩니다. 외부 테이블의
table-uuid
및 카탈로그 연결 데이터베이스 테이블이 일치하지 않으면 새로 고침이 실패하고 Snowflake가 카탈로그 연결 데이터베이스에서 테이블을 삭제합니다. Snowflake는 원격 테이블을 변경하지 않습니다.원격 카탈로그에서 테이블을 삭제하면 Snowflake는 카탈로그 연결 데이터베이스에서 테이블을 삭제합니다. 이 작업은 비동기식이므로 원격 카탈로그에서 변경 사항을 바로 확인하지 못할 수도 있습니다.
원격 카탈로그에서 테이블의 이름을 바꾸면 Snowflake는 카탈로그 연결 데이터베이스에서 기존 테이블을 삭제하고 새 이름으로 테이블을 생성합니다.
마스킹 정책 및 태그가 지원됩니다. 복제, 공유를 포함한 기타 Snowflake 고유 기능은 지원되지 않습니다.
NAMESPACE_FLATTEN_DELIMITER 매개 변수에 대해 선택하는 문자는 원격 네임스페이스에 나타날 수 없습니다. 자동 검색 프로세스 중에 Snowflake는 구분 기호가 포함된 네임스페이스를 건너뛰고 카탈로그 연결 데이터베이스에 해당 스키마를 생성하지 않습니다.
NAMESPACE_FLATTEN_DELIMITER 매개 변수에
_
,$
, 대문자 또는 숫자 이외의 값을 지정하는 경우 테이블을 쿼리할 때 스키마 이름을 따옴표로 묶어야 합니다.AWS Glue에 연결된 데이터베이스의 경우 소문자를 사용해야 하며 스키마, 테이블 및 열 이름을 큰따옴표로 묶어야 합니다. 이는 소문자 식별자만 지원하는 다른 Iceberg REST 카탈로그에도 필요합니다.
다음 예제는 유효한 쿼리를 보여줍니다.
CREATE SCHEMA "s1";
다음 문은 대문자를 사용하거나 큰따옴표를 생략하므로 유효하지 않습니다.
CREATE SCHEMA s1; CREATE SCHEMA "Schema1";
UNDROP ICEBERG TABLE 사용은 지원되지 않습니다.
외부 볼륨을 사용하는 테이블에 대해 목록과의 공유가 지원됩니다. 직접 공유는 현재 지원되지 않습니다.
카탈로그 연결 데이터베이스의 테이블에 쓰는 경우:
발급된 자격 증명은 지원되지 않습니다.
중첩된 네임스페이스의 테이블에 쓰는 기능은 현재 지원되지 않습니다.
ALLOWED_NAMESPACES 및 BLOCKED_NAMESPACES의 경우 Snowflake는 세트에 이미 상위 네임스페이스가 포함된 경우 중첩된 네임스페이스를 저장하지 않습니다. 예를 들어, 데이터베이스를 만들고
ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3')
를 지정하면 나머지 두 개는 자동으로 포함되기 때문에 Snowflake는ns1
만 저장합니다. 예제 데이터베이스에서 GET_DDL 을 사용하면 Snowflake는ALLOWED_NAMESPACES = ('ns1')
을 반환합니다. BLOCKED_NAMESPACES에도 동일하게 적용됩니다.카탈로그 연결 데이터베이스의 테이블을 쿼리하려면:
Snowflake는 따옴표가 없는 식별자(테이블 및 열 이름)를 대문자로 자동 변환합니다. 외부 Iceberg 카탈로그에서 대문자와 소문자를 구분하는 식별자를 사용하는 경우 테이블 및 열 이름을 큰따옴표로 묶어야 합니다.
오브젝트 식별자에 대한 자세한 내용은 식별자 요구 사항 섹션을 참조하세요.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
중첩된 네임스페이스를 평탄화한 카탈로그 연결 데이터베이스를 만듭니다.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int',
NAMESPACE_MODE = FLATTEN_NESTED_NAMESPACE,
NAMESPACE_FLATTEN_DELIMITER = '-'
)
EXTERNAL_VOLUME = 'my_external_vol';
공급된 자격 증명을 사용하고 허용된 네임스페이스를 하나 지정하는 카탈로그 연결 데이터베이스를 만듭니다.
CREATE DATABASE my_linked_db
LINKED_CATALOG = (
CATALOG = 'my_catalog_int_vended_creds',
ALLOWED_NAMESPACES = ('my_namespace')
);