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>' , ... ] ) ]
  [ CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE } ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]

여기서

catalogParams ::=
  CATALOG = '<catalog_int>',
  [ ALLOWED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ]
  [ BLOCKED_NAMESPACES = ('<namespace1>', '<namespace2>', ... ) ]
  [ ALLOWED_WRITE_OPERATIONS = { NONE | ALL } ]
  [ 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'

데이터베이스에 대한 설명을 지정합니다.

기본값: 값 없음

CATALOG_CASE_SENSITIVITY = { CASE_SENSITIVE | CASE_INSENSITIVE }

외부 Iceberg 카탈로그가 식별자에 사용하는 대소문자 구분 방식을 지정합니다.

  • CASE_SENSITIVE: 외부 Iceberg 카탈로그는 대소문자를 구분하는 식별자를 사용합니다. 예를 들어, Snowflake Open Catalog는 대소문자를 구분하는 카탈로그입니다.

    • Snowflake는 대소문자를 포함하여 표시되는 그대로 식별자를 일치시킵니다. Snowflake는 따옴표가 없는 식별자를 대문자로 자동으로 변환하지만, 따옴표가 있는 식별자는 외부 카탈로그의 대소문자와 정확히 일치해야 합니다.

    • 그렇지만 외부 Iceberg 카탈로그가 실제로 대소문자를 구분하지 않고 소문자로 정규화되는 경우 식별자를 큰따옴표로 묶어야 합니다.

    이러한 요구 사항은 기존 스키마, 테이블 및 테이블 열을 식별할 때만 적용됩니다.

  • CASE_INSENSITIVE: 외부 Iceberg 카탈로그는 대소문자를 구분하지 않는 식별자를 사용합니다. 예를 들어, Unity Catalog 및 AWS Glue는 대소문자를 구분하지 않는 카탈로그입니다.

    • 외부 Iceberg 카탈로그에서 대소문자를 구분하지 않고 다음 명령 중 하나를 실행하는 경우 식별자를 큰따옴표로 묶어야 합니다.

      • CREATE ICEBERG TABLE

      • CREATE SCHEMA

      • ALTER ICEBERG TABLE ADD COLUMN

      • ALTER ICEBERG TABLE RENAME COLUMN

    • 그렇지만 외부 Iceberg 카탈로그가 실제로 대소문자를 구분하는 경우 Snowflake는 따옴표가 없는 식별자를 대소문자를 구분하지 않는 것으로 처리하고 따옴표가 없는 식별자를 대문자로 자동으로 변환합니다. 오브젝트를 생성하거나 쿼리할 때 Snowflake는 따옴표가 없는 한, 대소문자에 관계없이 식별자를 일치시킵니다.

      Snowflake는 대소문자가 다른 두 개의 다른 식별자를 확인할 수 없으므로 이 패턴은 사용하지 않는 것이 좋습니다. 이 패턴은 대소문자만 다른 두 식별자가 없는 경우에만 작동합니다.

    다르게 언급된 경우를 제외하고 이러한 요구 사항은 기존 스키마, 테이블 및 테이블 열을 식별할 때만 적용됩니다.

기본값: CASE_INSENSITIVE

예제를 포함하여 식별자 확인을 위한 요구 사항에 대한 자세한 내용은 카탈로그 연결 데이터베이스의 식별자 확인 요구 사항 섹션을 참조하세요.

TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )

태그 이름과 태그 문자열 값을 지정합니다.

태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.

문에서 태그를 지정하는 방법에 대한 자세한 내용은 태그 할당량 섹션을 참조하십시오.

WITH CONTACT ( purpose = contact [ , purpose = contact ...] )

새 오브젝트를 하나 이상의 연락처 와 연결합니다.

AS 절을 제외한 다른 모든 절 뒤에 오는 WITH CONTACT 절을 지정합니다(해당 절이 이 명령에서 지원되는 경우).

카탈로그 매개변수(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 를 동기화하지 않습니다.

ALLOWED_WRITE_OPERATIONS = { NONE | ALL }

카탈로그 연결 데이터베이스가 읽기 전용인지 또는 쓰기 가능한지를 지정합니다.

  • NONE: 카탈로그 연결 데이터베이스는 읽기 전용입니다.

    카탈로그 연결 데이터베이스가 읽기 전용인 경우 실행하는 작업 중 카탈로그에 커밋해야 하는 모든 작업이 실패합니다. 예를 들면 DROP ICEBERG TABLE과 같습니다.

  • ALL: 카탈로그 연결 데이터베이스가 쓰기 가능합니다.

    경고

    카탈로그 연결 데이터베이스에 쓰기 권한이 활성화된 경우 Snowflake는 테이블 삭제를 원격 카탈로그로 전파하여 두 시스템에서 테이블과 데이터를 제거합니다.

기본값: ALL

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).

  • 자동 테이블 검색을 특정 네임스페이스 세트로 제한하려면 ALLOWED_NAMESPACES 매개 변수를 사용합니다. BLOCKED_NAMESPACES 매개 변수를 사용하여 네임스페이스 세트를 차단할 수도 있습니다.

  • Snowflake는 사용자 또는 역할에 대해 원격 카탈로그 액세스 제어를 동기화하지 않습니다.

  • 카탈로그 연결 데이터베이스에서 스키마, 외부 관리 Iceberg 테이블 또는 데이터베이스 역할을 생성할 수 있습니다. 다른 Snowflake 오브젝트 생성은 현재 지원되지 않습니다.

  • 카탈로그 연결 데이터베이스를 생성할 때 Iceberg 테이블에 사용할 기본 Iceberg 버전 또는 merge-on-read 동작을 지정할 수 없습니다.

    그러나 ALTER DATABASE(카탈로그 연결) 명령을 통해 다음 매개 변수를 설정하여 기존 데이터베이스에 대한 해당 속성을 수정할 수 있습니다.

    • ICEBERG_VERSION_DEFAULT

    • ENABLE_ICEBERG_MERGE_ON_READ

  • 카탈로그 연결 데이터베이스의 Iceberg 테이블의 경우:

    • Snowflake bidirectionally syncs table and column descriptions between the remote catalog and Snowflake. Sync can update a description to a new value, but never replaces a non-empty description with an empty one. Other remote catalog table properties, such as retention policies or buffers, aren’t copied, and altering table properties isn’t currently supported.

    • 자동 새로 고침 은 기본적으로 활성화됩니다. 외부 테이블의 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 사용은 지원되지 않습니다.

    • 공유:

      • 목록과의 공유는 현재 지원되지 않습니다.

      • 직접 공유가 지원됩니다.

  • 카탈로그 연결 데이터베이스의 테이블에 쓰는 경우:

    • 중첩된 네임스페이스에 테이블을 만드는 기능은 현재 지원되지 않습니다.

    • 중첩된 네임스페이스의 테이블에 쓰는 기능은 현재 지원되지 않습니다.

    • 위치 행 수준 삭제<https://iceberg.apache.org/spec/#row-level-deletes>`_는 Amazon S3, Azure 또는 Google Cloud에 저장된 테이블에 대해 지원됩니다. 동등 삭제 파일을 사용한 행 수준 삭제는 지원되지 않습니다. 행 수준 삭제에 대한 자세한 내용은 :ref:`label-tables_iceberg_row_level_deletes`를 참조하세요. Copy-On-Write 모드에서 DML(Data Manipulation Language) 작업 실행을 활성화하는 위치 삭제를 끄려면 테이블, 스키마 또는 데이터베이스 수준에서 :code:`ENABLE_ICEBERG_MERGE_ON_READ 매개 변수를 FALSE로 설정합니다.

  • ALLOWED_NAMESPACES 및 BLOCKED_NAMESPACES의 경우 Snowflake는 세트에 이미 상위 네임스페이스가 포함된 경우 중첩된 네임스페이스를 저장하지 않습니다. 예를 들어, 데이터베이스를 만들고 ALLOWED_NAMESPACES = ('ns1', 'ns1.ns2', 'ns1.ns3') 를 지정하면 나머지 두 개는 자동으로 포함되기 때문에 Snowflake는 ns1 만 저장합니다. 예제 데이터베이스에서 GET_DDL 을 사용하면 Snowflake는 ALLOWED_NAMESPACES = ('ns1') 을 반환합니다. BLOCKED_NAMESPACES에도 동일하게 적용됩니다.

  • 카탈로그 연결 데이터베이스에서 :doc:`데이터베이스 역할 </sql-reference/sql/create-database-role>`을 생성하여 데이터베이스의 오브젝트에 대한 액세스 제어를 관리할 수 있습니다. 예를 들어 카탈로그 연결 데이터베이스의 스키마와 테이블에 대한 권한을 데이터베이스 역할에 부여한 다음, 데이터베이스 역할을 계정 역할에 부여할 수 있습니다.

  • 카탈로그 연결 데이터베이스의 테이블을 쿼리하려면:

    • 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')
  );

카탈로그 연결 데이터베이스에서 데이터베이스 역할을 생성하고 권한을 부여합니다.

CREATE DATABASE ROLE my_linked_db.analyst;

GRANT USAGE ON SCHEMA my_linked_db.my_namespace TO DATABASE ROLE my_linked_db.analyst;

GRANT SELECT ON ALL ICEBERG TABLES IN SCHEMA my_linked_db.my_namespace TO DATABASE ROLE my_linked_db.analyst;

GRANT DATABASE ROLE my_linked_db.analyst TO ROLE data_consumer;