CREATE ICEBERG TABLE(Iceberg 카탈로그로서의 Snowflake)

현재/지정된 스키마에서 Snowflake를 Iceberg 카탈로그 로 사용하는 Apache Iceberg™ 테이블 을 생성하거나 바꿉니다.

이 명령은 다음 변형을 지원합니다.

  • CREATE ICEBERG TABLE … AS SELECT(채워진 테이블을 생성하며 CTAS라고도 함)

  • CREATE ICEBERG TABLE … LIKE(기존 테이블의 빈 복사본을 생성함)

이 항목에서는 Iceberg 테이블 을 지정하여 혼동을 방지하는 경우를 제외하고는 Iceberg 테이블을 간단히 ‘테이블’이라고 부릅니다.

참고

테이블을 만들기 전에 Iceberg 메타데이터와 데이터 파일이 저장되는 외부 볼륨 을 만들어야 합니다. 자세한 지침은 외부 볼륨 구성 섹션을 참조하십시오.

참고 항목:

ALTER ICEBERG TABLE , DROP ICEBERG TABLE , SHOW ICEBERG TABLES , DESCRIBE ICEBERG TABLE , UNDROP ICEBERG TABLE

구문

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name> (
    -- Column definition
    <col_name> <col_type>
      [ inlineConstraint ]
      [ NOT NULL ]
      [ COLLATE '<collation_specification>' ]
      [ { DEFAULT <expr>
          | { AUTOINCREMENT | IDENTITY }
            [ { ( <start_num> , <step_num> )
                | START <num> INCREMENT <num>
              } ]
        } ]
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
      [ [ WITH ] PROJECTION POLICY <policy_name> ]
      [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
      [ COMMENT '<string_literal>' ]

    -- Additional column definitions
    [ , <col_name> <col_type> [ ... ] ]

    -- Out-of-line constraints
    [ , outoflineConstraint [ ... ] ]
  )
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = 'SNOWFLAKE' ]
  BASE_LOCATION = '<directory_for_table_files>'
  [ CATALOG_SYNC = '<open_catalog_integration_name>']
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ CHANGE_TRACKING = { TRUE | FALSE } ]
  [ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] AGGREGATION POLICY <policy_name> ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
Copy

여기서

inlineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE
    | PRIMARY KEY
    | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ]
  }
  [ <constraint_properties> ]
Copy

추가 인라인 제약 조건의 세부 정보는 CREATE | ALTER TABLE … CONSTRAINT 를 참조하십시오.

outoflineConstraint ::=
  [ CONSTRAINT <constraint_name> ]
  { UNIQUE [ ( <col_name> [ , <col_name> , ... ] ) ]
    | PRIMARY KEY [ ( <col_name> [ , <col_name> , ... ] ) ]
    | [ FOREIGN KEY ] [ ( <col_name> [ , <col_name> , ... ] ) ]
      REFERENCES <ref_table_name> [ ( <ref_col_name> [ , <ref_col_name> , ... ] ) ]
  }
  [ <constraint_properties> ]
Copy

참고

  • Snowflake는 Iceberg 메타데이터에서 식별자 필드로 PRIMARY KEY로 정의된 열을 나타냅니다. 이러한 열의 IDs는 메타데이터에서 식별자 필드 IDs 로 채워집니다.

  • Snowflake는 Iceberg 테이블의 PRIMARY KEY 열에 NOT NULL 및 UNIQUE 제약 조건을 적용하지 않습니다.

추가 아웃오브 라인 제약 조건의 세부 정보는 CREATE | ALTER TABLE … CONSTRAINT 를 참조하십시오.

베리언트 구문

CREATE ICEBERG TABLE … AS SELECT(CTAS라고도 함)

쿼리에서 반환된 데이터로 채워진 새 테이블을 만듭니다. 문장의 끝에 AS SELECT 절을 배치합니다.

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = 'SNOWFLAKE' ]
  BASE_LOCATION = '<relative_path_from_external_volume>'
  [ COPY GRANTS ]
  [ ... ]
  AS SELECT <query>
Copy

마스킹 정책은 CTAS 문의 열에 적용할 수 있습니다. 열 데이터 타입 뒤에 마스킹 정책을 지정합니다. 마찬가지로 행 액세스 정책을 테이블에 적용할 수 있습니다. 예:

CREATE ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] )
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = 'SNOWFLAKE' ]
  BASE_LOCATION = '<directory_for_table_files>'
  [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] )
  [ ... ]
  AS SELECT <query>
Copy

참고

CTAS에서 COPY GRANTS 매개 변수는 OR REPLACE 절과 결합된 경우에만 유효합니다. COPY GRANTS는 SELECT 문에서 쿼리되는 원본 테이블이 아니라, (이미 테이블이 있는 경우) CREATE OR REPLACE로 대체되는 테이블에서 권한을 복사합니다. COPY GRANTS를 사용한 CTAS로 해당 테이블에 대한 기존 권한을 유지하면서 새 데이터 세트로 테이블을 덮어쓸 수 있습니다.

COPY GRANTS 매개 변수에 대한 자세한 내용은 이 문서의 COPY GRANTS 섹션을 참조하십시오.

이 변형 구문에 대한 자세한 내용은 사용법 노트 를 참조하십시오.

CREATE ICEBERG TABLE … LIKE

기존 테이블과 같은 열 정의를 사용하지만, 기존 테이블에서 데이터를 복사하지 않고 새 테이블을 만듭니다. 열 이름, 유형, 기본값, 제약 조건이 새 테이블에 복사됩니다.

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> LIKE <source_table>
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  [ ... ]
Copy

COPY GRANTS 매개 변수에 대한 자세한 내용은 이 문서의 COPY GRANTS 섹션을 참조하십시오.

참고

데이터 공유를 통해 액세스하는 자동 증가 시퀀스가 있는 테이블에는 CREATE TABLE … LIKE가 지원되지 않습니다.

이 변형 구문에 대한 자세한 내용은 사용법 노트 를 참조하십시오.

CREATE ICEBERG TABLE … CLONE

데이터를 실제로 복사하지 않고 원본 테이블의 모든 기존 데이터를 포함하고 똑같은 열 정의를 사용하여 새 Iceberg 테이블을 만듭니다. 이 베리언트를 사용하면 과거의 특정 시간이나 시점의 테이블을 복제할 수도 있습니다(Time Travel 사용).

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <name>
  CLONE <source_iceberg_table>
    [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
    [COPY GRANTS]
    ...
Copy

참고

이 문이 같은 이름의 기존 Iceberg 테이블을 대체하는 경우, Snowflake는 대체되는 테이블에서 권한 부여를 복사합니다. 그 이름의 기존 테이블이 없는 경우 Snowflake는 복제되는 원본 테이블에서 권한 부여를 복사합니다.

COPY GRANTS 매개 변수에 대한 자세한 내용은 이 문서의 COPY GRANTS 섹션을 참조하십시오.

복제에 대한 자세한 내용은 CREATE <오브젝트> … CLONE복제 및 Apache Iceberg™ 테이블 섹션을 참조하십시오.

필수 매개 변수

table_name

테이블의 식별자(이름)를 지정하며, 테이블이 생성되는 스키마에 대해 고유해야 합니다.

또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예: "My object")로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.

자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.

col_name

열 식별자(이름)를 지정합니다. 테이블 식별자에 대한 모든 요구 사항은 열 식별자에도 적용됩니다.

자세한 내용은 식별자 요구 사항예약된 키워드와 제한된 키워드 섹션을 참조하십시오.

참고

표준 예약 키워드 외에, 다음 키워드는 ANSI 표준 컨텍스트 함수용으로 예약되어 있으므로 열 식별자로 사용할 수 없습니다.

  • CURRENT_DATE

  • CURRENT_ROLE

  • CURRENT_TIME

  • CURRENT_TIMESTAMP

  • CURRENT_USER

예약된 키워드의 목록은 예약된 키워드와 제한된 키워드 를 참조하십시오.

col_type

열의 데이터 타입을 지정합니다.

테이블 열에 지정할 수 있는 데이터 타입에 대한 자세한 내용은 Apache Iceberg™ 테이블의 데이터 타입 섹션을 참조하십시오.

참고

기본 키로 float 또는 double 를 사용할 수 없습니다(Apache Iceberg 사양 에 따라).

BASE_LOCATION = 'directory_for_table_files'

Snowflake가 테이블에 대한 데이터 및 메타데이터 파일을 쓸 수 있는 디렉터리의 경로입니다. 테이블의 EXTERNAL_VOLUME 위치에서 상대 경로를 지정합니다. 자세한 내용은 데이터 및 메타데이터 디렉터리 섹션을 참조하십시오.

테이블을 생성한 후에는 이 디렉터리를 변경할 수 없습니다.

선택적 매개 변수

CONSTRAINT ...

테이블에서 지정한 열에 대한 인라인 또는 아웃오브 라인 제약 조건을 정의합니다.

구문 정보는 CREATE | ALTER TABLE … CONSTRAINT 섹션을 참조하십시오. 제약 조건에 대한 자세한 내용은 제약 조건 을 참조하십시오.

COLLATE 'collation_specification'

문자열 비교와 같은 열 작업에 사용할 데이터 정렬을 지정합니다. 이 옵션은 텍스트 열(VARCHAR, STRING, TEXT 등)에만 적용됩니다. 자세한 내용은 데이터 정렬 사양 섹션을 참조하십시오.

DEFAULT ... 또는 . AUTOINCREMENT ...

INSERT 또는 CREATE TABLE AS SELECT 문을 통해 값이 명시적으로 지정되지 않은 경우 기본값이 열에 자동으로 삽입되는지 여부를 지정합니다.

DEFAULT expr

열 기본값은 다음 중 하나일 수 있는 지정된 식으로 정의됩니다.

  • 상수 값.

  • 시퀀스 참조(seq_name.NEXTVAL).

  • 스칼라 값을 반환하는 간단한 식입니다.

    UDF가 보안 UDF 가 아닌 경우 이 간단한 식은 SQL UDF(사용자 정의 함수)를 포함할 수 있습니다.

    참고

    기본 식이 SQL UDF를 참조하는 경우에는 해당 함수가 테이블 생성 시 함수 정의로 대체됩니다. 사용자 정의 함수가 나중에 다시 정의되더라도 열의 기본 식이 업데이트되지는 않습니다.

    이 간단한 식은 다음에 대한 참조를 포함할 수 없습니다.

    • 하위 쿼리.

    • 집계.

    • 윈도우 함수.

    • 보안 UDF.

    • SQL 이외의 언어로 작성된 UDF(예: Java, JavaScript).

    • 외부 함수.

{ AUTOINCREMENT | IDENTITY } [ { ( start_num , step_num ) | START num INCREMENT num } ]

AUTOINCREMENTIDENTITY 는 동의어입니다. 둘 줄 하나가 사용될 때 열의 기본값은 지정된 숫자로 시작하고 각각의 연속 값은 지정된 양만큼 자동으로 증가합니다.

조심

Snowflake는 시퀀스를 사용하여 자동 증가 열의 값을 생성합니다. 시퀀스에는 제한이 있습니다. 시퀀스 의미 체계 섹션을 참조하십시오.

시작 및 단계/증분 모두에 대한 기본값은 1 입니다.

AUTOINCREMENTIDENTITY 는 숫자 데이터 타입의 열에만 사용할 수 있습니다.

기본값: 값 없음(열에 기본값이 없음)

참고

DEFAULTAUTOINCREMENT 는 상호 배타적이며 한 열에 하나만 지정할 수 있습니다.

MASKING POLICY = policy_name

열에 설정할 마스킹 정책 을 지정합니다.

PROJECTION POLICY policy_name

열에 설정할 마스킹 정책 을 지정합니다.

COMMENT 'string_literal'

열에 대한 설명을 지정합니다.

(열 수준 또는 테이블 수준에서 설명을 지정할 수 있습니다. 각 설명에 대한 구문은 약간 다릅니다.)

USING ( col_name , cond_col_1 ... )

조건부 마스킹 정책의 SQL 식에 전달할 인자를 지정합니다.

목록의 첫 번째 열은 데이터를 마스킹하거나 토큰화할 정책 조건에 대한 열을 지정하며, 마스킹 정책이 설정된 열과 반드시 일치해야 합니다.

추가 열은 쿼리가 첫 번째 열에서 선택할 때 쿼리 결과의 각 행에 있는 데이터를 마스킹할지 토큰화할지 결정하기 위해 평가할 열을 지정합니다.

USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.

CLUSTER BY ( expr [ , expr , ... ] )

테이블에서 하나 이상의 열 또는 열 식을 클러스터링 키로 지정합니다. 자세한 내용은 클러스터링 키 및 클러스터링된 테이블 섹션을 참조하십시오.

기본값: 값 없음(테이블에 대해 정의된 클러스터링 키가 없음)

중요

클러스터링 키는 모든 테이블에 대해 의도되거나 권장되지 않으며, 일반적으로 매우 큰(즉, 멀티 테라바이트 크기의) 테이블에 이점이 있습니다.

테이블에 대한 클러스터링 키를 지정하기 전에 마이크로 파티션을 이해해야 합니다. 자세한 내용은 Snowflake 테이블 구조 이해하기 섹션을 참조하십시오.

EXTERNAL_VOLUME = 'external_volume_name'

Iceberg 테이블이 메타데이터 파일과 데이터를 Parquet 형식으로 저장하는 외부 볼륨의 식별자(이름)를 지정합니다. Iceberg 메타데이터 및 매니페스트 파일은 테이블 스키마, 파티션, 스냅샷, 기타 메타데이터를 저장합니다.

이 매개 변수를 지정하지 않으면 Iceberg 테이블은 기본적으로 스키마, 데이터베이스 또는 계정의 외부 볼륨으로 설정됩니다. 스키마는 데이터베이스보다 우선하고, 데이터베이스는 계정보다 우선합니다.

CATALOG = 'SNOWFLAKE'

Snowflake를 Iceberg 카탈로그로 지정합니다. Snowflake는 테이블에 대해 압축과 같은 모든 수명 주기 유지 관리를 처리합니다.

CATALOG_SYNC = 'open_catalog_integration_name'

선택적으로, Snowflake Open Catalog 에 대해 구성된 카탈로그 통합의 이름을 지정합니다. 이름을 지정하면 Snowflake가 테이블을 Snowflake Open Catalog 계정의 외부 카탈로그와 동기화합니다. 자세한 내용은 Snowflake 관리 테이블을 Snowflake Open Catalog 와 동기화하기 섹션을 참조하십시오.

STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED }

테이블에 대한 저장소 직렬화 정책을 지정합니다. 테이블 생성 시 지정하지 않으면 테이블은 스키마, 데이터베이스 또는 계정 수준에서 설정된 값을 상속합니다. 어느 수준에도 값이 지정되지 않으면 테이블은 기본값을 사용합니다.

테이블을 생성한 후에는 이 매개 변수의 값을 변경할 수 없습니다.

  • COMPATIBLE: Snowflake는 서드 파티 컴퓨팅 엔진과의 상호 운용성을 보장하는 인코딩 및 압축을 수행합니다.

  • OPTIMIZED: Snowflake는 Snowflake 내에서 최상의 테이블 성능을 보장하는 인코딩 및 압축을 수행합니다.

기본값: OPTIMIZED

DATA_RETENTION_TIME_IN_DAYS = integer

테이블에서 레코드 데이터에 대해 Time Travel 작업(SELECT, CLONE, UNDROP)을 수행할 수 있도록 Snowflake 관리형 테이블의 보존 기간을 지정합니다. 자세한 내용은 Time Travel 이해 및 사용하기 섹션을 참조하십시오.

이 오브젝트 수준 매개 변수에 대한 자세한 설명과 아울러 오브젝트 매개 변수에 대한 자세한 내용은 매개 변수 를 참조하십시오.

값:

  • Standard Edition: 0 또는 1

  • Enterprise Edition: 영구 테이블의 경우 0 ~ 90

기본값:

  • Standard Edition: 1

  • Enterprise Edition 또는 그 이상: 1 (스키마, 데이터베이스 또는 계정 수준에서 다른 기본값이 지정되지 않은 경우)

참고

0 의 값은 테이블의 Time Travel을 효과적으로 비활성화합니다.

MAX_DATA_EXTENSION_TIME_IN_DAYS = integer

Snowflake가 테이블의 스트림이 부실해지는 것을 방지하기 위해 테이블의 데이터 보존 기간을 연장할 수 있는 최대 일수를 지정하는 오브젝트 매개 변수입니다.

이 매개 변수에 대한 자세한 설명은 MAX_DATA_EXTENSION_TIME_IN_DAYS 섹션을 참조하십시오.

CHANGE_TRACKING = { TRUE | FALSE }

테이블에서 변경 내용 추적을 활성화할지 지정합니다.

  • TRUE 로 지정하면 테이블에서 변경 내용 추적이 활성화됩니다. 이 설정을 선택하면 소스 테이블에 한 쌍의 숨겨진 열이 추가되고 열에 변경 내용 추적 메타데이터가 저장되기 시작합니다. 이러한 열은 소량의 저장소를 사용합니다.

    SELECT 문에 CHANGES 절을 사용하거나 테이블에서 하나 이상의 스트림을 만들고 쿼리하여 변경 내용 추적 메타데이터를 쿼리할 수 있습니다.

  • FALSE 로 지정하면 테이블에서 변경 내용 추적이 활성화되지 않습니다.

기본값: FALSE

DEFAULT_DDL_COLLATION = 'collation_specification'

향후 테이블에 추가되는 열을 포함하여, 테이블의 열에 대한 기본 데이터 정렬 사양 을 지정합니다.

매개 변수에 대한 자세한 내용은 DEFAULT_DDL_COLLATION 섹션을 참조하십시오.

COPY GRANTS

다음 CREATE TABLE 베리언트 중 하나를 사용하여 새 테이블을 만들 때 원본 테이블의 액세스 권한을 유지하도록 지정합니다.

  • CREATE OR REPLACE TABLE

  • CREATE TABLE … LIKE

  • CREATE TABLE … CLONE

이 매개 변수는 OWNERSHIP을 제외한 모든 권한을 기존 테이블에서 새 테이블로 복사합니다. 새 테이블은 스키마의 오브젝트 유형에 대해 정의된 향후 모든 권한 부여를 상속하지는 않습니다. 기본적으로, CREATE TABLE 문을 실행하는 역할은 새 테이블을 소유합니다.

CREATE ICEBERG TABLE 문에 이 매개 변수가 포함되지 않은 경우에는 새 테이블이 원본 테이블에 부여된 모든 명시적인 액세스 권한을 상속하지 않지만, 스키마의 오브젝트 유형에 대해 정의된 향후 모든 권한 부여를 상속하지는 않습니다.

참고:

  • 데이터 공유 사용 시:

    • 기존 테이블을 다른 계정과 공유한 경우 대체 테이블도 공유됩니다.

    • 기존 테이블을 데이터 컨슈머로서 자신의 계정과 공유하고 (부모 데이터베이스에서 GRANT IMPORTED PRIVILEGES 를 사용하여) 계정의 다른 역할에 추가로 액세스 권한을 부여한 경우 대체 테이블에도 액세스 권한이 부여됩니다.

  • 대체 테이블에 대한 SHOW GRANTS 출력에는 CREATE ICEBERG TABLE 문이 실행될 때 현재 타임스탬프를 포함한 이 문을 실행한 역할로서 복사된 권한의 피부여자가 나열됩니다.

  • 권한 부여 복사 작업은 CREATE ICEBERG TABLE 명령에서 원자적으로(즉, 같은 트랜잭션 내에서) 발생합니다.

COMMENT = 'string_literal'

설명을 지정합니다. 열 수준이나 테이블 수준에서 설명을 지정할 수 있습니다. 각 설명에 대한 구문은 약간 다릅니다.

기본값: 값 없음

ROW ACCESS POLICY policy_name ON ( col_name [ , col_name ... ] )

테이블에 설정할 행 액세스 정책 을 지정합니다.

AGGREGATION POLICY policy_name

테이블에 설정할 집계 정책 을 지정합니다.

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

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

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

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

액세스 제어 요구 사항

이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.

권한

오브젝트

참고

CREATE ICEBERG TABLE

스키마

CREATE EXTERNAL VOLUME

계정

새 외부 볼륨을 생성하는 데 필요합니다.

USAGE

외부 볼륨

기존 외부 볼륨을 참조하는 데 필요합니다.

스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.

지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.

보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.

사용법 노트

  • 이 명령 실행 시 고려 사항:

    • Snowflake를 Iceberg 카탈로그로 사용하는 경우 클라우드 간 테이블과 리전 간 Iceberg 테이블은 현재 지원되지 않습니다. CREATE ICEBERG TABLE이 "External volume <volume_name> must have a STORAGE_LOCATION defined in the local region ..." 과 같은 오류 메시지를 반환하는 경우 외부 볼륨이 Snowflake 계정과 동일한 리전의 활성 저장소 위치를 사용하는지 확인하십시오.

    • 큰따옴표로 묶인 식별자를 사용하여 외부 볼륨을 생성한 경우 CREATE ICEBERG TABLE 문에 생성된 것처럼 (큰따옴표를 포함하여) 식별자를 정확히 지정해야 합니다. 따옴표를 포함하지 않으면 Object does not exist 오류(또는 유사한 종류의 오류)가 발생할 수 있습니다.

      예를 보려면 (이 항목의) 예제 섹션을 참조하십시오.

  • 테이블 생성 시 고려 사항

    • 스키마는 이름이 같은 테이블 및/또는 뷰를 포함할 수 없습니다. 테이블을 만들 때는 다음 사항이 적용됩니다.

      • 스키마에 같은 이름의 뷰가 이미 있는 경우 오류가 반환되고 테이블이 생성되지 않습니다.

      • 같은 이름의 테이블이 스키마에 이미 있는 경우 명령에 선택적인 OR REPLACE 키워드를 포함하지 않는 한 오류가 반환되고 테이블이 생성되지 않습니다.

    • CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.

      이는 CREATE OR REPLACE ICEBERG TABLE 작업과 동시에 수행되는 모든 쿼리가 이전 또는 새 테이블 버전을 사용함을 의미합니다.

    • 예약된 키워드 와 마찬가지로, ANSI로 예약된 함수 이름(CURRENT_DATE, CURRENT_TIMESTAMP 등)을 열 이름으로 사용할 수 없습니다.

    • (선택적 OR REPLACE 키워드를 사용하여) 테이블을 다시 만들면 기록이 삭제되고, 이로 인해 테이블의 스트림이 부실해집니다. 부실 스트림은 읽을 수 없습니다.

  • 변형 구문 사용:

    • CREATE ICEBERG TABLE … LIKE:

      • 원본 테이블에 클러스터링 키가 있으면 새 테이블에 클러스터링 키가 있습니다. 기본적으로, 원본 테이블에 대해 자동 클러스터링이 일시 중단되었더라도 자동 클러스터링은 새 테이블에 대해 일시 중단되지 않습니다.

    • CREATE ICEBERG TABLE … AS SELECT(CTAS):

      • 클러스터링 키가 CTAS 문에 지정된 경우:

        • 열 정의가 필요하며 문에 명시적으로 이를 지정해야 합니다.

        • 기본적으로, 원본 테이블에 대해 자동 클러스터링이 일시 중단되더라도 자동 클러스터링은 새 테이블에 대해 일시 중단되지 않습니다.

      • 특정 순서의 행이 있는 테이블을 만들려면 CTAS의 SELECT 절에서 ORDER BY 하위 절을 사용하십시오. CLUSTER BY를 지정하면 테이블이 생성될 때 데이터를 클러스터링하지 않는 대신, CLUSTER BY는 자동 클러스터링 에 의존하여 시간의 경과에 따라 데이터를 다시 클러스터링합니다.

        CREATE TABLE 문의 ORDER BY 하위 절은 해당 테이블에서 이후에 SELECT 문을 통해 반환되는 행의 순서에 영향을 주지 않습니다. 이후의 SELECT 문에서 행의 순서를 지정하려면 해당 문에서 ORDER BY 하위 절을 사용하십시오.

  • 메타데이터 관련:

    주의

    고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.

Snowflake 관리 테이블 생성과 관련된 문제를 해결하려면 Snowflake 관리 테이블을 생성할 수 없습니다. 섹션을 참조하십시오.

Snowflake를 카탈로그로 사용하여 Iceberg 테이블 만들기

이 예에서는 Snowflake를 Iceberg 카탈로그로 사용하여 Iceberg 테이블을 생성합니다. 결과 테이블은 Snowflake에 의해 관리되며 읽기 및 쓰기 액세스를 지원합니다.

예제에서는 테이블 이름(my_iceberg_table)을 BASE_LOCATION 으로 설정합니다. 이런 방식으로, Snowflake는 외부 볼륨 위치에 있는 테이블과 같은 이름의 디렉터리에 데이터와 메타데이터를 기록합니다.

CREATE ICEBERG TABLE my_iceberg_table (amount int)
  CATALOG = 'SNOWFLAKE'
  EXTERNAL_VOLUME = 'my_external_volume'
  BASE_LOCATION = 'my_iceberg_table';
Copy

CTAS 변형 구문을 사용하여 Iceberg 테이블 생성

이 예제에서는 CREATE ICEBERG TABLE … AS SELECT 변형 구문을 사용하여 이름이 base_iceberg_table 인 테이블에서 새로운 Iceberg 테이블을 생성합니다. AS SELECT 절은 문장의 끝에 있어야 합니다.

CREATE OR REPLACE ICEBERG TABLE iceberg_table_copy (column1 int)
  EXTERNAL_VOLUME = 'my_external_volume'
  CATALOG = 'SNOWFLAKE'
  BASE_LOCATION = 'iceberg_table_copy'
  AS SELECT * FROM base_iceberg_table;
Copy

큰따옴표로 묶은 식별자로 외부 볼륨 지정

이 예제에서는 식별자에 큰따옴표가 붙은 외부 볼륨이 있는 Iceberg 테이블을 생성합니다. 큰따옴표로 묶인 식별자는 대/소문자를 구분하며 종종 특수 문자를 포함합니다.

식별자 "external_volume_1" 은 생성된 대로 정확하게 지정됩니다(큰따옴표 포함). 따옴표를 포함하지 않으면 Object does not exist 오류(또는 유사한 종류의 오류)가 발생할 수 있습니다.

자세한 내용은 큰따옴표로 묶인 식별자 을 참조하십시오.

CREATE OR REPLACE ICEBERG TABLE table_with_quoted_external_volume
  EXTERNAL_VOLUME = '"external_volume_1"'
  CATALOG = 'SNOWFLAKE'
  BASE_LOCATION = 'my/relative/path/from/external_volume';
Copy