CREATE ICEBERG TABLE

CREATE ICEBERG TABLE (Iceberg REST catalog)

현재/지정한 스키마에 Iceberg REST 카탈로그용 Apache Iceberg™ 테이블을 만들거나 교체하는 명령이에요.

출처: 문서

본문

이 명령은 다음 시나리오에 사용해요:

  • 오픈 소스 Apache Iceberg REST OpenAPI 사양을 준수하는 원격 Iceberg 카탈로그를 사용하려는 경우.
  • Snowflake Open Catalog나 Apache Polaris™의 테이블을 쿼리하려는 경우.
  • 카탈로그 연결(catalog-linked) 데이터베이스에 외부 관리 테이블을 만들려는 경우.

테이블을 만들기 전에 Iceberg 메타데이터와 데이터 파일이 저장될 외부 볼륨을 만들어야 해요. 또한 테이블용 카탈로그 인티그레이션(catalog integration)도 필요해요.

구문 (Syntax)

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [ EXTERNAL_VOLUME = '<external_volume_name>' ]
  [ CATALOG = '<catalog_integration_name>' ]
  CATALOG_TABLE_NAME = '<rest_catalog_table_name>'
  [ CATALOG_NAMESPACE = '<catalog_namespace>' ]
  [ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
  [ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ AUTO_REFRESH = { TRUE | FALSE } ]
  [ COMMENT = '<string_literal>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]
  [ ICEBERG_MERGE_ON_READ_BEHAVIOR = { 'AUTO' | 'ENABLED' | 'DISABLED' } ]
  [ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ WITH CONTACT ( <purpose> = <contact_name> [ , <purpose> = <contact_name> ... ] ) ]

여기서:

partitionExpression ::=
  <col_name> -- identity transform
  | BUCKET ( <num_buckets> , <col_name> )
  | TRUNCATE ( <width> , <col_name> )
  | YEAR ( <col_name> )
  | MONTH ( <col_name> )
  | DAY ( <col_name> )
  | HOUR ( <col_name> )

CREATE ICEBERG TABLE (catalog-linked database)

CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
  [
    --Column definition
    <col_name> <col_type> [ DEFAULT <col_default> ]
      [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]

    -- Additional column definitions
    [ , <col_name> <col_type> [ DEFAULT <col_default> ] [ ... ] ]
  ]
  [ PARTITION BY ( partitionExpression [ , partitionExpression , ... ] ) ]
  [ PATH_LAYOUT = { FLAT | HIERARCHICAL } ]
  [ TARGET_FILE_SIZE = '{ AUTO | 16MB | 32MB | 64MB | 128MB }' ]
  [ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
  [ AUTO_REFRESH = { TRUE | FALSE } ]
  [ REPLACE_INVALID_CHARACTERS = { TRUE | FALSE } ]
  [ COPY GRANTS ]
  [ PURGE ]
  [ COMMENT = '<string_literal>' ]
  [ ICEBERG_VERSION = <integer> ]
  [ ICEBERG_MERGE_ON_READ_BEHAVIOR = { 'AUTO' | 'ENABLED' | 'DISABLED' } ]
  [ ENABLE_ICEBERG_MERGE_ON_READ = { TRUE | FALSE } ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ BASE_LOCATION = '<path_to_directory_for_table_files>' ]
  [ STORAGE_SERIALIZATION_POLICY = { COMPATIBLE | OPTIMIZED } ]

CREATE ICEBERG TABLE (catalog-linked database) … AS SELECT

CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ ... ]
  [ PURGE ]
  AS SELECT <query>

필수 매개변수

  • <table_name>: Snowflake에서의 테이블 식별자예요. 스키마 내에서 고유해야 해요. 원격 카탈로그의 테이블/네임스페이스 목록을 검색하려면 SYSTEM$LIST_ICEBERG_TABLES_FROM_CATALOG, SYSTEM$LIST_NAMESPACES_FROM_CATALOG, SYSTEM$EXECUTE_CATALOG_OPERATION 함수를 사용할 수 있어요.
  • CATALOG_TABLE_NAME = 'rest_catalog_table_name': 외부 카탈로그가 인식하는 테이블 이름을 지정해요. 테이블을 만든 후에는 변경할 수 없어요. 테이블 이름에 네임스페이스를 지정하지 마세요 (mynamespace.mytable). 네임스페이스는 CATALOG_NAMESPACE 매개변수로 지정해요.
  • col_name, col_type: (카탈로그 연결 데이터베이스, preview) 컬럼 식별자와 데이터 타입을 지정해요. ANSI 표준 컨텍스트 함수 예약 키워드(CURRENT_DATE 등)는 컬럼 이름으로 사용할 수 없어요.

선택 매개변수

  • col_name col_type DEFAULT col_default: (Iceberg v3 테이블) 지정된 컬럼의 초기 기본값과 쓰기 기본값을 지정해요. 문자열 타입이면 작은따옴표로 감싸야 해요. 정적 값만 지정할 수 있으며 표현식/함수는 지정할 수 없어요 (Iceberg v3 사양 준수).
  • EXTERNAL_VOLUME, CATALOG, PATH_LAYOUT, TARGET_FILE_SIZE, REPLACE_INVALID_CHARACTERS, AUTO_REFRESH, COMMENT, STORAGE_SERIALIZATION_POLICY, ICEBERG_MERGE_ON_READ_BEHAVIOR, ENABLE_ICEBERG_MERGE_ON_READ, TAG, WITH CONTACT 등이 지원돼요.

더 알아보기 (Learn more)