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)
- ALTER ICEBERG TABLE
- DROP ICEBERG TABLE
- SHOW ICEBERG TABLES
- DESCRIBE ICEBERG TABLE
- UNDROP ICEBERG TABLE
- 외부 볼륨 구성, Apache Iceberg™ REST 카탈로그용 카탈로그 인티그레이션 구성, Snowflake Open Catalog용 카탈로그 인티그레이션 구성