CREATE ICEBERG TABLE¶
현재/지정된 스키마에 새 Iceberg 테이블 을 만들거나 기존 Iceberg 테이블을 대체합니다. Iceberg 테이블은 빠른 SQL 처리, 보안 및 권한 부여, 데이터 거버넌스 등 Snowflake 테이블의 기능 표준을 개방형 Apache Iceberg 메타데이터 및 저장소와 결합합니다.
또한 이 명령은 Snowflake를 카탈로그로 사용하는 Iceberg 테이블에 대해 다음 베리언트를 지원합니다.
CREATE ICEBERG TABLE … AS SELECT(채워진 테이블을 생성하며 CTAS라고도 함)
CREATE ICEBERG TABLE … LIKE(기존 테이블의 빈 복사본을 생성함)
이 항목에서는 Iceberg 테이블 을 지정하여 혼동을 방지하는 경우를 제외하고는 Iceberg 테이블을 간단히 ‘테이블’이라고 부릅니다.
참고
테이블을 만들기 전에 Iceberg 메타데이터와 데이터 파일이 저장되는 외부 볼륨 을 만들어야 합니다. 자세한 지침은 Iceberg 테이블에 대한 외부 볼륨 구성하기 섹션을 참조하십시오.
외부 Iceberg 카탈로그를 사용하거나 카탈로그를 전혀 사용하지 않는 경우 테이블에 대한 카탈로그 통합도 생성해야 합니다. 자세한 내용은 Iceberg 테이블의 카탈로그 통합 구성하기 을 참조하십시오.
이 항목의 내용:
구문¶
Iceberg 카탈로그로서의 Snowflake¶
-- Snowflake as the Iceberg catalog
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 ] 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 = '<relative_path_from_external_volume>'
[ 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 ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
여기서
inlineConstraint ::= [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } [ <constraint_properties> ]추가 인라인 제약 조건의 세부 정보는 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> ]추가 아웃오브 라인 제약 조건의 세부 정보는 CREATE | ALTER TABLE … CONSTRAINT 를 참조하십시오.
외부 Iceberg 카탈로그¶
-- External Iceberg catalog
CREATE [ OR REPLACE ] ICEBERG TABLE [ IF NOT EXISTS ] <table_name>
[ EXTERNAL_VOLUME = '<external_volume_name>' ]
[ CATALOG = '<catalog_integration_name>' ]
externalCatalogParams
[ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
[ COMMENT = '<string_literal>' ]
여기서
externalCatalogParams (for AWS Glue Data Catalog) ::= CATALOG_TABLE_NAME = '<catalog_table_name>' [ CATALOG_NAMESPACE = '<catalog_namespace>' ]externalCatalogParams (for Iceberg files in object storage) ::= METADATA_FILE_PATH = '<metadata_file_path>'
베리언트 구문¶
Snowflake를 카탈로그로 사용하는 Iceberg 테이블을 생성하는 데 다음 베리언트 구문이 지원됩니다.
CREATE ICEBERG TABLE … AS SELECT(CTAS라고도 함)¶
쿼리에서 반환된 데이터로 채워진 새 테이블을 만듭니다.
CREATE [ OR REPLACE ] ICEBERG TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ] [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ] [ COPY GRANTS ] AS SELECT <query> [ ... ]
마스킹 정책은 CTAS 문의 열에 적용할 수 있습니다. 열 데이터 타입 뒤에 마스킹 정책을 지정합니다. 마찬가지로 행 액세스 정책을 테이블에 적용할 수 있습니다. 예:
CREATE ICEBERG TABLE <table_name> ( <col1> <data_type> [ WITH ] MASKING POLICY <policy_name> [ , ... ] ) ... [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col1> [ , ... ] ) AS SELECT <query> [ ... ]
참고
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 GRANTS에 대한 자세한 내용은 이 문서의 COPY GRANTS 를 참조하십시오.
참고
데이터 공유를 통해 액세스되는 자동 증분 시퀀스가 있는 테이블에 대한 CREATE TABLE … LIKE는 현재 지원되지 않습니다.
필수 매개 변수¶
table_name
테이블의 식별자(이름)를 지정하며, 테이블이 생성되는 스키마에 대해 고유해야 합니다.
또한, 식별자는 알파벳 문자로 시작해야 하며 전체 식별자 문자열을 큰따옴표(예:
"My object"
)로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없습니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
col_name
열 식별자(이름)를 지정합니다. 테이블 식별자에 대한 모든 요구 사항은 열 식별자에도 적용됩니다.
자세한 내용은 식별자 요구 사항 및 예약된 키워드와 제한된 키워드 섹션을 참조하십시오.
참고
표준 예약 키워드 외에, 다음 키워드는 ANSI 표준 컨텍스트 함수용으로 예약되어 있으므로 열 식별자로 사용할 수 없습니다.
CURRENT_DATE
CURRENT_ROLE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
예약된 키워드의 목록은 예약된 키워드와 제한된 키워드 를 참조하십시오.
col_type
열의 데이터 타입을 지정합니다.
테이블 열에 지정할 수 있는 데이터 타입에 대한 자세한 내용은 Iceberg 테이블 데이터 타입 섹션을 참조하십시오.
query
INFER_SCHEMA 함수를 호출하고 출력을 배열로 서식 지정하는 하위 쿼리입니다.
선택적 매개 변수¶
EXTERNAL_VOLUME = 'external_volume_name'
Iceberg 테이블이 메타데이터 파일과 데이터를 Parquet 형식으로 저장하는 외부 볼륨의 식별자(이름)를 지정합니다. Iceberg 메타데이터 및 매니페스트 파일은 테이블 스키마, 파티션, 스냅샷, 기타 메타데이터를 저장합니다.
이 매개 변수를 지정하지 않으면 Iceberg 테이블은 기본적으로 스키마, 데이터베이스 또는 계정의 외부 볼륨으로 설정됩니다. 스키마는 데이터베이스보다 우선하고, 데이터베이스는 계정보다 우선합니다.
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
} ] AUTOINCREMENT
와IDENTITY
는 동의어입니다. 둘 줄 하나가 사용될 때 열의 기본값은 지정된 숫자로 시작하고 각각의 연속 값은 지정된 양만큼 자동으로 증가합니다.조심
Snowflake는 시퀀스를 사용하여 자동 증가 열의 값을 생성합니다. 시퀀스에는 제한이 있습니다. 시퀀스 의미 체계 섹션을 참조하십시오.
시작 및 단계/증분 모두에 대한 기본값은
1
입니다.AUTOINCREMENT
및IDENTITY
는 숫자 데이터 타입의 열에만 사용할 수 있습니다.
기본값: 값 없음(열에 기본값이 없음)
참고
DEFAULT
와AUTOINCREMENT
는 상호 배타적이며 한 열에 하나만 지정할 수 있습니다.MASKING POLICY = policy_name
열에 설정할 마스킹 정책 을 지정합니다.
COMMENT 'string_literal'
열에 대한 설명을 지정합니다.
(열 수준 또는 테이블 수준에서 설명을 지정할 수 있습니다. 각 설명에 대한 구문은 약간 다릅니다.)
USING ( col_name , cond_col_1 ... )
조건부 마스킹 정책 SQL 식에 전달할 인자를 지정합니다.
목록의 첫 번째 열은 데이터를 마스킹하거나 토큰화할 정책 조건에 대한 열을 지정하며, 마스킹 정책이 설정된 열과 반드시 일치해야 합니다.
추가 열은 첫 번째 열에 대해 쿼리가 수행될 때 쿼리 결과의 각 행에 있는 데이터를 마스킹할지 또는 토큰화할지 결정하기 위해 평가할 열을 지정합니다.
USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.
CLUSTER BY ( expr [ , expr , ... ] )
테이블에서 하나 이상의 열 또는 열 식을 클러스터링 키로 지정합니다. 자세한 내용은 클러스터링 키 및 클러스터링된 테이블 섹션을 참조하십시오.
기본값: 값 없음(테이블에 대해 정의된 클러스터링 키가 없음)
중요
클러스터링은 Snowflake를 Iceberg 카탈로그로 사용하는 테이블에만 지원됩니다.
클러스터링 키는 모든 테이블에 대해 의도되거나 권장되지 않으며, 일반적으로 매우 큰(즉, 멀티 테라바이트 크기의) 테이블에 이점이 있습니다.
테이블에 대한 클러스터링 키를 지정하기 전에 마이크로 파티션을 이해해야 합니다. 자세한 내용은 Snowflake 테이블 구조 이해하기 섹션을 참조하십시오.
DATA_RETENTION_TIME_IN_DAYS = integer
테이블에서 레코드 데이터에 대해 Time Travel 작업(SELECT, CLONE, UNDROP)을 수행할 수 있도록 테이블의 보존 기간을 지정합니다. 자세한 내용은 Time Travel 이해 및 사용하기 및 임시 및 일시적 테이블 관련 작업하기 섹션을 참조하십시오.
이 오브젝트 수준 매개 변수에 대한 자세한 설명과 아울러 오브젝트 매개 변수에 대한 자세한 내용은 매개 변수 를 참조하십시오.
값:
Standard Edition:
0
또는1
Enterprise Edition:
영구 테이블의 경우
0
~90
임시 테이블과 일시적 테이블의 경우
0
또는1
기본값:
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 ... ] )
테이블에 설정할 행 액세스 정책 을 지정합니다.
TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] )
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
Snowflake 카탈로그 매개 변수¶
CATALOG = 'SNOWFLAKE'
Snowflake를 Iceberg 카탈로그로 지정합니다. Snowflake는 테이블에 대해 압축과 같은 모든 수명 주기 유지 관리를 처리합니다.
BASE_LOCATION = 'relative_path_from_external_volume'
테이블의
EXTERNAL_VOLUME
위치에서 Snowflake가 테이블 데이터와 메타데이터를 쓸 수 있는 디렉터리로 이동하는 상대 경로를 지정합니다.테이블을 생성한 후에는 이 매개 변수를 변경할 수 없습니다.
외부 카탈로그 매개 변수(externalCatalogParams)¶
CATALOG = 'catalog_integration_name'
이 테이블에 대한 카탈로그 통합의 식별자(이름)를 지정합니다.
지정하지 않으면 Iceberg 테이블은 기본적으로 스키마, 데이터베이스 또는 계정에 대한 카탈로그 통합으로 설정됩니다. 스키마는 데이터베이스보다 우선하고, 데이터베이스는 계정보다 우선합니다.
AWS Glue
CATALOG_TABLE_NAME = 'catalog_table_name'
AWS Glue Data Catalog에서 인식되는 테이블 이름을 지정합니다. Iceberg 테이블을 생성할 때
CATALOG_TABLE_NAME
을 사용하는 예는 이 항목의 예제 를 참조하십시오. 테이블을 생성한 후에는 이 매개 변수를 변경할 수 없습니다.CATALOG_NAMESPACE = 'catalog_namespace'
선택적으로 AWS Glue Data Catalog 원본의 네임스페이스(예:
my_glue_database
)를 지정하고 카탈로그 통합으로 지정된 기본 카탈로그 네임스페이스를 재정의합니다. 테이블 수준에서 네임스페이스를 지정하면 AWS Glue에 대한 단일 카탈로그 통합을 사용하여 다양한 데이터베이스에 걸쳐 Iceberg 테이블을 생성할 수 있습니다.지정하지 않으면 테이블은 카탈로그 통합과 연결된 기본 카탈로그 네임스페이스를 사용합니다.
오브젝트 저장소의 Iceberg 파일
METADATA_FILE_PATH = 'metadata_file_path'
열 정의에 사용할 Iceberg 메타데이터 파일의 상대 경로를 지정합니다. 예를 들어,
s3://mybucket_us_east_1/metadata/v1.metadata.json
이 메타데이터 파일의 전체 경로이고 외부 볼륨 저장소 위치가s3://mybucket_us_east_1/
인 경우metadata/v1.metadata.json
을METADATA_FILE_PATH
의 값으로 지정합니다.Snowflake 버전 7.34 이전에는 이 매개 변수를
METADATA_FILE_NAME
이라고 했습니다.
참고
Snowflake 버전 7.34 이상에서는 오브젝트 저장소의 Iceberg 파일에서 테이블을 생성하기 위해 BASE_LOCATION
을 지정하지 않습니다.
버전 7.34 이전에는 오브젝트 저장소의 Iceberg 파일에서 테이블을 생성하려면 BASE_LOCATION
(이전 버전에서는 FILE_PATH
라고도 함)이라는 매개 변수가 필요했습니다. 이 매개 변수는 EXTERNAL_VOLUME
위치에서 상대 경로를 지정했습니다.
이전 구문을 사용하는 스크립트나 문을 계속 실행할 수 있습니다. 그러면 다음 사항이 적용됩니다.
테이블의 Parquet 데이터 파일과 Iceberg 메타데이터 파일은
BASE_LOCATION
내에 있어야 합니다.테이블을 새로 고치려면
BASE_LOCATION
에 상대적인 경로를 지정해야 합니다. 예를 들어 메타데이터 파일의 전체 경로가s3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json
인 경우metadata/v1.metadata.json
을metadata-file-relative-path
로 지정합니다.자세한 내용은 ALTER ICEBERG TABLE … REFRESH 섹션을 참조하십시오.
액세스 제어 요구 사항¶
이 SQL 명령을 실행하는 데 사용되는 역할 에는 최소한 다음 권한 이 있어야 합니다.
권한 |
오브젝트 |
참고 |
---|---|---|
CREATE ICEBERG TABLE |
스키마 |
|
CREATE EXTERNAL VOLUME |
계정 |
새 외부 볼륨을 생성하는 데 필요합니다. |
USAGE |
외부 볼륨 |
기존 외부 볼륨을 참조하는 데 필요합니다. |
CREATE INTEGRATION |
계정 |
새 카탈로그 통합을 생성하는 데 필요합니다. |
USAGE |
카탈로그 통합 |
기존 카탈로그 통합을 참조하는 데 필요합니다. |
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
사용법 노트¶
스키마는 이름이 같은 테이블 및/또는 뷰를 포함할 수 없습니다. 테이블을 만들 때는 다음 사항이 적용됩니다.
스키마에 같은 이름의 뷰가 이미 있는 경우 오류가 반환되고 테이블이 생성되지 않습니다.
같은 이름의 테이블이 스키마에 이미 있는 경우 명령에 선택적인
OR REPLACE
키워드를 포함하지 않는 한 오류가 반환되고 테이블이 생성되지 않습니다.
CREATE OR REPLACE <오브젝트> 문은 원자성입니다. 즉, 오브젝트가 바뀔 때 단일 트랜잭션으로 이전 오브젝트가 삭제되고 새 오브젝트가 생성됩니다.
이는 CREATE OR REPLACE ICEBERG TABLE 작업과 동시에 수행되는 모든 쿼리가 이전 또는 새 테이블 버전을 사용함을 의미합니다.
예약된 키워드 와 마찬가지로, ANSI로 예약된 함수 이름(CURRENT_DATE, CURRENT_TIMESTAMP 등)을 열 이름으로 사용할 수 없습니다.
(선택적
OR REPLACE
키워드를 사용하여) 테이블을 다시 만들면 기록이 삭제되고, 이로 인해 테이블의 스트림이 부실해집니다. 부실 스트림은 읽을 수 없습니다.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
오류(또는 유사한 종류의 오류)가 발생할 수 있습니다.예를 보려면 (이 항목의) 예제 섹션을 참조하십시오.
Snowflake 버전 7.34 이상에서는 오브젝트 저장소의 Iceberg 파일에서 테이블을 생성하기 위해
BASE_LOCATION
을 지정하지 않습니다.버전 7.34 이전에는 오브젝트 저장소의 Iceberg 파일에서 테이블을 생성하려면
BASE_LOCATION
(이전 버전에서는FILE_PATH
라고도 함)이라는 매개 변수가 필요했습니다. 이 매개 변수는EXTERNAL_VOLUME
위치에서 상대 경로를 지정했습니다.이전 구문을 사용하는 스크립트나 문을 계속 실행할 수 있습니다. 그러면 다음 사항이 적용됩니다.
테이블의 Parquet 데이터 파일과 Iceberg 메타데이터 파일은
BASE_LOCATION
내에 있어야 합니다.테이블을 새로 고치려면
BASE_LOCATION
에 상대적인 경로를 지정해야 합니다. 예를 들어 메타데이터 파일의 전체 경로가s3://mybucket_us_east_1/my_base_location/metadata/v1.metadata.json
인 경우metadata/v1.metadata.json
을metadata-file-relative-path
로 지정합니다.자세한 내용은 ALTER ICEBERG TABLE … REFRESH 섹션을 참조하십시오.
CREATE TABLE … LIKE:
원본 테이블에 클러스터링 키가 있으면 새 테이블에 클러스터링 키가 있습니다. 기본적으로, 원본 테이블에 대해 자동 클러스터링이 일시 중단되었더라도 자동 클러스터링은 새 테이블에 대해 일시 중단되지 않습니다.
CREATE TABLE … AS SELECT(CTAS):
클러스터링 키가 CTAS 문에 지정된 경우:
열 정의가 필요하며 문에 명시적으로 이를 지정해야 합니다.
기본적으로, 원본 테이블에 대해 자동 클러스터링이 일시 중단되더라도 자동 클러스터링은 새 테이블에 대해 일시 중단되지 않습니다.
CREATE TABLE 문의 ORDER BY 하위 절은 해당 테이블에서 이후에 SELECT 문을 통해 반환되는 행의 순서에 영향을 주지 않습니다. 이후의 SELECT 문에서 행의 순서를 지정하려면 해당 문에서 ORDER BY 하위 절을 사용하십시오.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
Snowflake를 카탈로그로 사용하여 Iceberg 테이블 만들기
이 예에서는 Snowflake를 Iceberg 카탈로그로 사용하여 Iceberg 테이블을 생성합니다. 결과 테이블은 Snowflake에 의해 관리되며 읽기 및 쓰기 액세스를 지원합니다. 이 문은 BASE_LOCATION
매개 변수의 값을 지정합니다. 이를 통해 외부 볼륨에서 테이블 데이터와 메타데이터를 쓸 위치를 Snowflake에 알려줍니다.
CREATE ICEBERG TABLE my_iceberg_table (amount int)
CATALOG='SNOWFLAKE'
EXTERNAL_VOLUME='my_external_volume'
BASE_LOCATION='my/relative/path/from/extvol';
AWS Glue를 카탈로그로 사용하여 Iceberg 테이블 만들기
이 예에서는 AWS Glue Data Catalog를 사용하는 Iceberg 테이블을 생성합니다. 기본 카탈로그 네임스페이스를 재정의하고 테이블의 카탈로그 네임스페이스를 설정하기 위해 이 문에서는 선택적 CATALOG_NAMESPACE
매개 변수를 사용합니다.
CREATE ICEBERG TABLE glue_iceberg_table
EXTERNAL_VOLUME='glue_catalog_volume'
CATALOG='glue_catalog_integration'
CATALOG_TABLE_NAME='my_glue_catalog_table'
CATALOG_NAMESPACE='icebergcatalogdb2';
오브젝트 저장소의 Iceberg 메타데이터에서 Iceberg 테이블 만들기
이 예에서는 외부 클라우드 저장소에 저장된 Iceberg 메타데이터에서 Iceberg 테이블을 생성합니다. 또한 외부 볼륨의 테이블 메타데이터에 대한 상대 경로도 지정합니다.
CREATE ICEBERG TABLE my_iceberg_table
EXTERNAL_VOLUME='my_external_volume'
CATALOG='my_catalog_integration'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';
큰따옴표로 묶은 식별자를 사용하여 외부 볼륨 또는 카탈로그 통합 지정하기
이 예에서는 식별자에 큰따옴표가 포함된 외부 볼륨과 카탈로그 통합이 포함된 Iceberg 테이블을 생성합니다. 큰따옴표로 묶인 식별자는 대/소문자를 구분하며 종종 특수 문자를 포함합니다.
식별자 "exvol_lower"
및 "catint_lower"
는 생성된 대로 정확하게 지정됩니다(큰따옴표 포함). 따옴표를 포함하지 않으면 Object does not exist
오류(또는 유사한 종류의 오류)가 발생할 수 있습니다.
자세한 내용은 큰따옴표로 묶인 식별자 을 참조하십시오.
CREATE OR REPLACE ICEBERG TABLE itable_with_quoted_catalog
EXTERNAL_VOLUME = '"exvol_lower"'
CATALOG = '"catint_lower"'
METADATA_FILE_PATH='path/to/metadata/v1.metadata.json';