ALTER TABLE¶
기존 테이블의 속성, 열 또는 제약 조건을 수정합니다.
구문¶
ALTER TABLE [ IF EXISTS ] <name> RENAME TO <new_table_name>
ALTER TABLE [ IF EXISTS ] <name> SWAP WITH <target_table_name>
ALTER TABLE [ IF EXISTS ] <name> { clusteringAction | tableColumnAction | constraintAction }
ALTER TABLE [ IF EXISTS ] <name> dataGovnPolicyTagAction
ALTER TABLE [ IF EXISTS ] <name> extTableColumnAction
ALTER TABLE [ IF EXISTS ] <name> searchOptimizationAction
ALTER TABLE [ IF EXISTS ] <name> SET
[ STAGE_FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>' | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ STAGE_COPY_OPTIONS = ( copyOptions ) ]
[ DATA_RETENTION_TIME_IN_DAYS = <integer> ]
[ MAX_DATA_EXTENSION_TIME_IN_DAYS = <integer> ]
[ CHANGE_TRACKING = { TRUE | FALSE } ]
[ DEFAULT_DDL_COLLATION = '<collation_specification>' ]
[ ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE } ]
[ COMMENT = '<string_literal>' ]
ALTER TABLE [ IF EXISTS ] <name> UNSET {
DATA_RETENTION_TIME_IN_DAYS |
MAX_DATA_EXTENSION_TIME_IN_DAYS |
CHANGE_TRACKING |
DEFAULT_DDL_COLLATION |
ENABLE_SCHEMA_EVOLUTION |
COMMENT |
}
[ , ... ]
여기서
clusteringAction ::= { CLUSTER BY ( <expr> [ , <expr> , ... ] ) /* RECLUSTER is deprecated */ | RECLUSTER [ MAX_SIZE = <budget_in_bytes> ] [ WHERE <condition> ] /* { SUSPEND | RESUME } RECLUSTER is valid action */ | { SUSPEND | RESUME } RECLUSTER | DROP CLUSTERING KEY }tableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ { DEFAULT <default_value> | { AUTOINCREMENT | IDENTITY } /* AUTOINCREMENT (or IDENTITY) is supported only for */ /* columns with numeric data types (NUMBER, INT, FLOAT, etc.). */ /* Also, if the table is not empty (i.e. if the table contains */ /* any rows), only DEFAULT can be altered. */ [ { ( <start_num> , <step_num> ) | START <num> INCREMENT <num> } ] [ { ORDER | NOORDER } ] } ] [ inlineConstraint ] [ COLLATE '<collation_specification>' ] | RENAME COLUMN <col_name> TO <new_col_name> | ALTER | MODIFY [ ( ] [ COLUMN ] <col1_name> DROP DEFAULT , [ COLUMN ] <col1_name> SET DEFAULT <seq_name>.NEXTVAL , [ COLUMN ] <col1_name> { [ SET ] NOT NULL | DROP NOT NULL } , [ COLUMN ] <col1_name> [ [ SET DATA ] TYPE ] <type> , [ COLUMN ] <col1_name> COMMENT '<string>' , [ COLUMN ] <col1_name> UNSET COMMENT [ , [ COLUMN ] <col2_name> ... ] [ , ... ] [ ) ] | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] } inlineConstraint ::= [ NOT NULL ] [ CONSTRAINT <constraint_name> ] { UNIQUE | PRIMARY KEY | { [ FOREIGN KEY ] REFERENCES <ref_table_name> [ ( <ref_col_name> ) ] } } [ <constraint_properties> ]열 변경을 위한 자세한 구문과 예는 ALTER TABLE … ALTER COLUMN 을 참조하십시오. .
인라인 제약 조건 생성/변경을 위한 자세한 구문과 예는 CREATE | ALTER TABLE … CONSTRAINT 를 참조하십시오.
dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { SET AGGREGATION POLICY <policy_name> [ FORCE ] | UNSET AGGREGATION POLICY } | ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]extTableColumnAction ::= { ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) | RENAME COLUMN <col_name> TO <new_col_name> | DROP [ COLUMN ] [ IF EXISTS ] <col1_name> [, <col2_name> ... ] }constraintAction ::= { ADD outoflineConstraint | RENAME CONSTRAINT <constraint_name> TO <new_constraint_name> | { ALTER | MODIFY } { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] ) [ [ NOT ] ENFORCED ] [ VALIDATE | NOVALIDATE ] [ RELY | NORELY ] | DROP { CONSTRAINT <constraint_name> | PRIMARY KEY | UNIQUE | FOREIGN KEY } ( <col_name> [ , ... ] ) [ CASCADE | RESTRICT ] } 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 를 참조하십시오.
searchOptimizationAction ::= { ADD SEARCH OPTIMIZATION [ ON <search_method_with_target> [ , <search_method_with_target> ... ] ] | DROP SEARCH OPTIMIZATION [ ON { <search_method_with_target> | <column_name> | <expression_id> } [ , ... ] ] }자세한 내용은 검색 최적화 작업(searchOptimizationAction) 섹션을 참조하십시오.
formatTypeOptions ::= -- If TYPE = CSV COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE RECORD_DELIMITER = '<character>' | NONE FIELD_DELIMITER = '<character>' | NONE FILE_EXTENSION = '<string>' PARSE_HEADER = TRUE | FALSE SKIP_HEADER = <integer> SKIP_BLANK_LINES = TRUE | FALSE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 ESCAPE = '<character>' | NONE ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE TRIM_SPACE = TRUE | FALSE FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE NULL_IF = ( '<string>' [ , '<string>' ... ] ) ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE EMPTY_FIELD_AS_NULL = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE ENCODING = '<string>' | UTF8 -- If TYPE = JSON COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE DATE_FORMAT = '<string>' | AUTO TIME_FORMAT = '<string>' | AUTO TIMESTAMP_FORMAT = '<string>' | AUTO BINARY_FORMAT = HEX | BASE64 | UTF8 TRIM_SPACE = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) FILE_EXTENSION = '<string>' ENABLE_OCTAL = TRUE | FALSE ALLOW_DUPLICATE = TRUE | FALSE STRIP_OUTER_ARRAY = TRUE | FALSE STRIP_NULL_VALUES = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE IGNORE_UTF8_ERRORS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSE -- If TYPE = AVRO COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = ORC TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = PARQUET COMPRESSION = AUTO | LZO | SNAPPY | NONE SNAPPY_COMPRESSION = TRUE | FALSE BINARY_AS_TEXT = TRUE | FALSE USE_LOGICAL_TYPE = TRUE | FALSE TRIM_SPACE = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE NULL_IF = ( '<string>' [ , '<string>' ... ] ) -- If TYPE = XML COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE IGNORE_UTF8_ERRORS = TRUE | FALSE PRESERVE_SPACE = TRUE | FALSE STRIP_OUTER_ELEMENT = TRUE | FALSE DISABLE_SNOWFLAKE_DATA = TRUE | FALSE DISABLE_AUTO_CONVERT = TRUE | FALSE REPLACE_INVALID_CHARACTERS = TRUE | FALSE SKIP_BYTE_ORDER_MARK = TRUE | FALSEcopyOptions ::= ON_ERROR = { CONTINUE | SKIP_FILE | SKIP_FILE_<num> | 'SKIP_FILE_<num>%' | ABORT_STATEMENT } SIZE_LIMIT = <num> PURGE = TRUE | FALSE RETURN_FAILED_ONLY = TRUE | FALSE MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE ENFORCE_LENGTH = TRUE | FALSE TRUNCATECOLUMNS = TRUE | FALSE FORCE = TRUE | FALSE
매개 변수¶
name
변경할 테이블의 식별자입니다. 식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
RENAME TO new_table_name
스키마의 다른 어떤 테이블에서도 현재 사용하지 않는 새 식별자로 지정된 테이블의 이름을 바꿉니다.
테이블 식별자에 대한 자세한 내용은 식별자 요구 사항 을 참조하십시오.
선택적으로 오브젝트의 이름을 바꾸는 동안 오브젝트를 다른 데이터베이스 및/또는 스키마로 이동할 수 있습니다. 그러려면 각각
db_name.schema_name.object_name
또는schema_name.object_name
형식으로 새 데이터베이스 및/또는 스키마 이름을 포함하는 정규화된new_name
값을 지정하십시오.참고
대상 데이터베이스 및/또는 스키마가 이미 있어야 합니다. 또한, 새 위치에 이름이 같은 오브젝트가 있으면 안 됩니다. 그렇지 않으면 문이 오류를 반환합니다.
오브젝트 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한을 가진 역할) 역시 대상 스키마를 소유하지 않는 한 오브젝트를 관리되는 액세스 스키마로 이동하는 것은 금지됩니다.
오브젝트(테이블, 열 등)의 이름이 바뀌면 그 오브젝트를 참조하는 다른 오브젝트도 새 이름으로 업데이트해야 합니다.
SWAP WITH target_table_name
Swap은 단일 트랜잭션에서 두 테이블의 이름을 바꿉니다.
영구 또는 일시적 테이블을 이 테이블을 만든 사용자 세션의 기간 동안만 지속되는 임시 테이블로 교환할 수 없습니다. 이 제한 사항 덕분에 임시 테이블을 영구 테이블이나 일시적 테이블과 교환하고 기존 영구 테이블 또는 일시적 테이블의 이름이 임시 테이블 이름과 같을 때 발생할 수 있는 명명 충돌이 방지됩니다. 영구 테이블이나 일시적 테이블을 임시 테이블과 교환하려면 다음 세 가지
ALTER TABLE ... RENAME TO
문, 즉 테이블a
를c
로,b
를a
로, 그런 다음c
를b
로 이름 바꾸기를 사용하십시오.
참고
테이블 이름을 바꾸거나 두 테이블을 교환하려면 작업을 수행하는 데 사용되는 역할이 테이블에 대해 OWNERSHIP 권한을 가져야 합니다. 또한, 테이블 이름을 바꾸려면 테이블의 스키마에 대한 CREATE TABLE 권한이 필요합니다.
SET ...
테이블에 대해 설정할 하나 이상의 속성/매개 변수를 지정합니다(공백, 쉼표 또는 새 줄로 구분).
STAGE_FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' )
또는 .STAGE_FILE_FORMAT = ( TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ] )
다음 중 하나일 수 있는 (데이터 로딩 및 언로딩을 위한) 테이블의 기본 파일 형식을 수정합니다.
FORMAT_NAME = file_format_name
데이터 로딩/언로딩에 사용할 기존 파일 형식 오브젝트를 지정합니다. 지정된 파일 형식 오브젝트에 따라 데이터 파일의 형식 유형(CSV, JSON 등)과 기타 형식 옵션이 결정됩니다.
문자열에 아무런 추가 형식 옵션도 지정되지 않습니다. 대신에 명명된 파일 형식 오브젝트는 데이터 로딩/언로딩에 사용되는 다른 파일 형식 옵션을 정의합니다. 자세한 내용은 CREATE FILE FORMAT 섹션을 참조하십시오.
TYPE = CSV | JSON | AVRO | ORC | PARQUET | XML [ ... ]
로딩/언로딩할 파일의 형식을 지정합니다. 추가적인 형식별 옵션이 문자열에 포함될 수 있습니다. 자세한 내용은 이 항목에 있는 형식 유형 옵션 섹션을 참조하십시오.
참고
FORMAT_NAME
과TYPE
은 상호 배타적이므로, 한 테이블에 대해 어느 하나만 지정할 수 있습니다.STAGE_COPY_OPTIONS = ( ... )
파일에서 테이블로 데이터를 로딩할 때 사용할 복사 옵션을 수정합니다. 자세한 내용은 이 항목에 있는 복사 옵션 섹션을 참조하십시오.
DATA_RETENTION_TIME_IN_DAYS = integer
Time Travel용 테이블의 보존 기간을 수정하는 오브젝트 수준 매개 변수입니다. 자세한 내용은 Time Travel 이해 및 사용하기 및 임시 및 일시적 테이블 관련 작업하기 섹션을 참조하십시오.
이 매개 변수에 대한 자세한 설명과 아울러 오브젝트 매개 변수에 대한 자세한 내용은 매개 변수 를 참조하십시오.
값:
Standard Edition:
0
또는1
Enterprise Edition:
영구 테이블의 경우
0
~90
임시 테이블과 일시적 테이블의 경우
0
또는1
참고
0
의 값은 테이블의 Time Travel을 효과적으로 비활성화합니다.MAX_DATA_EXTENSION_TIME_IN_DAYS = integer
Snowflake가 테이블의 스트림이 부실해지는 것을 방지하기 위해 테이블의 데이터 보존 기간을 연장할 수 있는 최대 일수를 지정하는 오브젝트 매개 변수입니다.
이 매개 변수에 대한 자세한 설명은 MAX_DATA_EXTENSION_TIME_IN_DAYS 섹션을 참조하십시오.
CHANGE_TRACKING = TRUE | FALSE
테이블에서 변경 내용 추적을 활성화 또는 비활성화하도록 지정합니다.
DEFAULT_DDL_COLLATION = 'collation_specification'
테이블에 추가된 모든 새 열에 대한 기본 데이터 정렬 사양 을 지정합니다.
이 매개 변수를 설정해도 기존 열의 데이터 정렬 사양은 변경되지 않습니다.
이 매개 변수에 대한 자세한 내용은 DEFAULT_DDL_COLLATION 을 참조하십시오.
ENABLE_SCHEMA_EVOLUTION = { TRUE | FALSE }
다음을 포함하여 원본 파일에서 테이블로 로드된 데이터에서 테이블 스키마에 대한 자동 변경을 활성화하거나 비활성화합니다.
열을 추가했습니다.
기본적으로 스키마 진화는 로드 작업당 최대 10개의 추가된 열로 제한됩니다. 로드 작업당 추가되는 열을 10개보다 많이 요청하려면 Snowflake 지원팀 에 문의하십시오.
새 데이터 파일에서 누락된 열 수에 상관없이 NOT NULL 제약 조건을 삭제할 수 있습니다.
TRUE
로 설정하면 자동 테이블 스키마 진화가 활성화됩니다. 기본 옵션인FALSE
를 그대로 사용하면 자동 테이블 스키마 진화가 비활성화됩니다.참고
파일에서 데이터를 로드하면 다음이 모두 true일 때 테이블 열이 진화합니다.
COPY INTO <테이블> 문은
MATCH_BY_COLUMN_NAME
옵션을 포함합니다.데이터를 로드하는 데 사용되는 역할에는 테이블에 대한 EVOLVE SCHEMA 또는 OWNERSHIP 권한이 있습니다.
또한 CSV를 사용한 스키마 진화의 경우
MATCH_BY_COLUMN_NAME
및PARSE_HEADER
와 함께 사용할 때ERROR_ON_COLUMN_COUNT_MISMATCH
를 false로 설정해야 합니다.COMMENT = 'string_literal'
테이블에 대한 설명을 추가하거나 기존 설명을 덮어씁니다.
UNSET ...
테이블에 대해 설정 해제할 속성/매개 변수를 하나 이상 지정하여 다시 기본값으로 재설정합니다.
DATA_RETENTION_TIME_IN_DAYS
MAX_DATA_EXTENSION_TIME_IN_DAYS
CHANGE_TRACKING
DEFAULT_DDL_COLLATION
ENABLE_SCHEMA_EVOLUTION
COMMENT
참고
UNSET
를 사용하여 파일 형식 및 복사 옵션을 재설정할 수 없습니다. 이러한 옵션을 재설정하려면 SET
를 사용해야 합니다.
클러스터링 작업(clusteringAction
)¶
CLUSTER BY ( expr [ , expr , ... ] )
하나 이상의 테이블 열 또는 열 식을 테이블의 클러스터링 키로 지정(또는 수정)합니다. 자동 클러스터링으로 클러스터링을 유지 관리하는 열/식입니다.
중요
클러스터링 키는 모든 테이블에 대해 의도되거나 권장되지 않으며, 일반적으로 매우 큰(즉, 멀티 테라바이트 크기의) 테이블에 이점이 있습니다.
테이블에 대한 클러스터링 키를 지정하기 전에 Snowflake 테이블 구조 이해하기 를 참조하십시오.
RECLUSTER ...
사용되지 않음
클러스터링 키가 정의된 테이블의 수동 증분 재클러스터링을 수행합니다.
MAX_SIZE = budget_in_bytes
사용되지 않음 — 더 효과적인 수동 재클러스터링을 달성하기 위해 더 큰 웨어하우스 사용
재클러스터할 테이블의 데이터양(바이트)에 대한 상한을 지정합니다.
WHERE condition
테이블의 데이터를 재클러스터할 조건 또는 범위를 지정합니다.
참고
테이블에 대한 OWNERSHIP 또는 INSERT 권한을 가진 역할만 테이블을 재클러스터할 수 있습니다.
SUSPEND | RESUME RECLUSTER
테이블에 대해 자동 클러스터링 을 활성화하거나 비활성화합니다.
DROP CLUSTERING KEY
테이블에 대한 클러스터링 키를 삭제합니다.
클러스터링 키와 재클러스터링에 대한 자세한 내용은 Snowflake 테이블 구조 이해하기 를 참조하십시오.
테이블 열 작업(tableColumnAction
)¶
ADD [ COLUMN ] [ IF NOT EXISTS ] col_name col_data_type
.[ DEFAULT default_value | AUTOINCREMENT ... ]
.[ inlineConstraint ]
[ COLLATE 'collation_specification' ]
.[ [ WITH ] MASKING POLICY policy_name ]
.[ [ WITH ] PROJECTION POLICY policy_name ]
.[ [ WITH ] TAG ( tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] ) ] [ , ...]
새 열을 추가합니다. 기본값, 인라인 제약 조건, 데이터 정렬, 마스킹 정책 및/또는 하나 이상의 태그를 지정할 수 있습니다.
추가하는 열의 기본값은 리터럴 값이어야 하며, 식이나 함수에서 반환된 값일 수 없습니다. 예를 들어 다음 명령을 실행하면 예상된 오류가 반환됩니다.
ALTER TABLE t1 ADD COLUMN c5 VARCHAR DEFAULT 12345::VARCHAR;
002263 (22000): SQL compilation error: Invalid column default expression [CAST(12345 AS VARCHAR(16777216))]
테이블을 처음 생성할 때 식을 기본값으로 사용할 수 있지만 열을 추가할 때는 사용할 수 없습니다.
열의 기본값은 열의 데이터 타입과 일치해야 합니다. 일치하지 않는 데이터 타입으로 기본값을 설정하려고 하면 오류가 발생하면서 실패합니다. 예:
ALTER TABLE t1 ADD COLUMN c6 DATE DEFAULT '20230101';
002023 (22000): SQL compilation error: Expression type does not match column data type, expecting DATE but got VARCHAR(8) for column C6
테이블 열 작업에 대한 자세한 내용은 다음을 참조하십시오.
ADD COLUMN 작업은 똑같은 명령의 여러 열에서 수행할 수 있습니다.
열이 이미 존재하는지 확실하지 않은 경우 열을 추가할 때 IF NOT EXISTS를 지정할 수 있습니다. 열이 이미 존재하는 경우 ADD COLUMN은 기존 열에 아무런 영향도 주지 않으며 오류를 발생시키지 않습니다.
참고
새 열에 대해 다음 중 하나를 지정하는 경우에도 IF NOT EXISTS를 지정할 수 없습니다.
DEFAULT, AUTOINCREMENT 또는 IDENTITY
UNIQUE, PRIMARY KEY 또는 FOREIGN KEY
RENAME COLUMN col_name to new_col_name
지정된 열의 이름을 현재 테이블의 다른 열에 사용되지 않는 새 이름으로 바꿉니다.
클러스터링 키의 일부인 열의 이름은 바꿀 수 없습니다.
오브젝트(테이블, 열 등)의 이름이 바뀌면 그 오브젝트를 참조하는 다른 오브젝트도 새 이름으로 업데이트해야 합니다.
DROP COLUMN [ IF EXISTS ] col_name [ CASCADE | RESTRICT ]
테이블에서 지정된 열을 제거합니다.
열이 이미 존재하는지 확실하지 않은 경우 열을 삭제할 때 IF EXISTS를 지정할 수 있습니다. 열이 존재하지 않는 경우 DROP COLUMN은 아무런 영향도 주지 않으며 오류를 발생시키지 않습니다.
열 삭제는 메타데이터 전용 작업입니다. 이 작업에서 마이크로 파티션을 즉시 다시 쓰지는 않으므로, 열이 사용하는 공간을 즉시 확보하지는 못합니다. 일반적으로, 개별 마이크로 파티션 내의 공간은 다음에 마이크로 파티션을 다시 쓸 때 확보할 수 있는데, 이는 일반적으로 DML(INSERT, UPDATE, DELETE) 또는 재클러스터링으로 인해 쓰기가 완료될 때입니다.
외부 테이블 열 작업(extTableColumnAction
)¶
다른 모든 외부 테이블 수정 사항은 ALTER EXTERNAL TABLE 을 참조하십시오.
ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> AS ( <expr> ) [, ...]
외부 테이블에 새 열을 추가합니다.
열이 이미 존재하는지 확실하지 않은 경우 열을 추가할 때 IF NOT EXISTS를 지정할 수 있습니다. 열이 이미 존재하는 경우 ADD COLUMN은 기존 열에 아무런 영향도 주지 않으며 오류를 발생시키지 않습니다.
이 작업은 똑같은 명령의 여러 열에서 수행할 수 있습니다.
col_name
열 식별자(예: 이름)를 지정하는 문자열입니다. 테이블 식별자에 대한 모든 요구 사항은 열 식별자에도 적용됩니다.
자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
col_type
열의 데이터 타입을 지정하는 문자열(상수)입니다. 데이터 타입은 열에 대한
expr
의 결과와 일치해야 합니다.테이블 열에 지정할 수 있는 데이터 타입에 대한 자세한 내용은 SQL 데이터 타입 참조 을 참조하십시오.
expr
열에 대한 식을 지정하는 문자열입니다. 쿼리할 때 이 열은 이 식에서 파생된 결과를 반환합니다.
외부 테이블 열은 명시적 식을 사용하여 정의되는 가상 열입니다. VALUE 열 및/또는 METADATA$FILENAME 의사 열을 사용하여 가상 열을 식으로 추가합니다.
- VALUE:
외부 파일의 단일 행을 나타내는 VARIANT 타입의 열입니다.
- CSV:
VALUE 열은 각 행을 열 위치(즉,
{c1: <column_1_value>, c2: <column_2_value>, c3: <column_1_value> ...}
)를 기준으로 식별된 요소를 가진 오브젝트로 구조화합니다.예를 들어 스테이징 상태 CSV 파일의 첫 번째 열을 참조하는
mycol
로 명명된 VARCHAR 열을 추가합니다.mycol varchar as (value:c1::varchar)
- 반정형 데이터:
요소 이름과 값을 큰따옴표로 묶습니다. 점 표기법을 사용하여 VALUE 열에서 경로를 트래버스합니다.
예를 들어 다음 행이 스테이징 상태 파일에서 반정형 데이터의 단일 행을 나타낸다고 가정해보십시오.
{ "a":"1", "b": { "c":"2", "d":"3" } }
스테이징 상태 파일에서 중첩된 반복
c
요소를 참조하는mycol
로 명명된 VARCHAR 열을 추가합니다.mycol varchar as (value:"b"."c"::varchar)
- METADATA$FILENAME:
스테이지의 경로를 포함하여, 외부 테이블에 포함된 각 스테이징된 데이터 파일의 이름을 식별하는 의사 열입니다.
RENAME COLUMN col_name to new_col_name
지정된 열의 이름을 현재 외부 테이블의 다른 열에 사용되지 않는 새 이름으로 바꿉니다.
DROP COLUMN [ IF EXISTS ] col_name
외부 테이블에서 지정된 열을 제거합니다.
열이 이미 존재하는지 확실하지 않은 경우 열을 삭제할 때 IF EXISTS를 지정할 수 있습니다. 열이 존재하지 않는 경우 DROP COLUMN은 아무런 영향도 주지 않으며 오류를 발생시키지 않습니다.
제약 조건 작업(constraintAction
)¶
ADD CONSTRAINT
테이블에 있는 하나 이상의 열에 아웃오브 라인 무결성 제약 조건을 추가합니다. (열에 대한) 인라인 제약 조건을 추가하려면 이 항목에 있는 열 작업 섹션을 참조하십시오.
RENAME CONSTRAINT constraint_name TO new_constraint_name
지정된 제약 조건의 이름을 바꿉니다.
ALTER | MODIFY CONSTRAINT ...
지정된 제약 조건의 속성을 변경합니다.
DROP CONSTRAINT constraint_name | PRIMARY KEY | UNIQUE | FOREIGN KEY ( col_name [ , ... ] ) [ CASCADE | RESTRICT ]
지정된 열 또는 열 세트에 대해 지정된 제약 조건을 삭제합니다.
제약 조건 추가 또는 변경을 위한 자세한 구문과 예는 CREATE | ALTER TABLE … CONSTRAINT 를 참조하십시오.
데이터 거버넌스 정책 및 태그 작업(dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
policy_name
정책의 식별자로, 스키마에 고유한 식별자여야 합니다.
다음 절은 테이블, 뷰, 이벤트 테이블 등 행 액세스 정책을 지원하는 모든 테이블 종류에 적용됩니다. 단순화하기 위해 해당 절에서는 “테이블”만 참조합니다.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
테이블에 행 액세스 정책을 추가합니다.
하나 이상의 열 이름을 지정해야 합니다. 각 열 이름을 구분하는 쉼표로 추가 열을 지정할 수 있습니다. 이 식을 사용하여 이벤트 테이블과 외부 테이블에 모두 행 액세스 정책을 추가합니다.
DROP ROW ACCESS POLICY policy_name
테이블에서 행 액세스 정책을 삭제합니다.
이 절을 사용하여 테이블에서 정책을 삭제합니다.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
테이블에 설정된 행 액세스 정책을 삭제하고 단일 SQL 문으로 동일한 테이블에 행 액세스 정책을 추가합니다.
DROP ALL ROW ACCESS POLICIES
테이블에서 모든 행 액세스 정책 연결을 삭제합니다.
이 식은 스키마에서 행 액세스 정책을 삭제한 후에 이벤트 테이블에서 정책을 삭제할 때 유용합니다. 테이블에서 행 액세스 정책 연결을 삭제하려면 이 식을 사용하십시오.
SET AGGREGATION POLICY policy_name [ FORCE ]
테이블에 집계 정책 을 할당합니다. 기존 집계 정책을 새 집계 정책으로 원자적으로 바꾸려면 선택적 FORCE 매개 변수를 사용하십시오.
UNSET AGGREGATION POLICY
테이블에서 집계 정책을 분리합니다.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
조건부 마스킹 정책 SQL 식에 전달할 인자를 지정합니다.
목록의 첫 번째 열은 데이터를 마스킹하거나 토큰화할 정책 조건에 대한 열을 지정하며, 마스킹 정책이 설정된 열과 반드시 일치해야 합니다.
추가 열은 첫 번째 열에 대해 쿼리가 수행될 때 쿼리 결과의 각 행에 있는 데이터를 마스킹할지 또는 토큰화할지 결정하기 위해 평가할 열을 지정합니다.
USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.
FORCE
열에 현재 설정된 마스킹 또는 프로젝션 정책을 단일 문에서 다른 정책으로 바꿉니다.
마스킹 정책과 함께
FORCE
키워드를 사용하려면 열에 현재 설정된 마스킹 정책의 데이터 타입(즉, STRING)과 일치하도록 ALTER TABLE 문(즉, STRING)에 있는 정책의 데이터 타입 이 필요합니다.마스킹 정책이 열에 현재 설정되어 있지 않으면 이 키워드를 지정해도 아무 효과가 없습니다.
자세한 내용은 열의 마스킹 정책 바꾸기 또는 프로젝션 정책 바꾸기 섹션을 참조하십시오.
검색 최적화 작업(searchOptimizationAction
)¶
ADD SEARCH OPTIMIZATION
전체 테이블에 대해, 또는 특정 열에 대해 선택적인 ON 절을 지정하는 경우 검색 최적화 를 추가합니다.
참고:
특히 테이블의 데이터가 자주 변경되는 경우 검색 최적화를 유지 관리하는 비용이 많이 들 수 있습니다. 자세한 내용은 검색 최적화 비용 추정 및 관리 섹션을 참조하십시오.
구체화된 뷰에 검색 최적화를 추가하려고 하면 Snowflake가 오류 메시지를 반환합니다.
ON search_method_with_target [, search_method_with_target ... ]
(전체 테이블이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화를 구성하도록 지정합니다.
search_method_with_target
의 경우 다음 구문을 가진 식을 사용합니다.<search_method>(<target> [, ...])
여기서
search_method
는 특정 유형의 조건자에 대한 쿼리를 최적화하는 다음 방법 중 하나를 지정합니다.검색 방법
설명
EQUALITY
같음 조건자와 IN 조건자.
SUBSTRING
하위 문자열 및 정규식과 일치하는 조건자(예: [ NOT ] LIKE, [ NOT ] ILIKE, [ NOT ] RLIKE, REGEXP_LIKE 등)
GEO
GEOGRAPHY 유형을 사용하는 조건자.
target
은 열, VARIANT 필드 또는 별표(*)를 지정합니다.search_method
의 값에 따라 다음 유형 중 하나의 열 또는 VARIANT 필드를 지정할 수 있습니다.검색 방법
지원 대상
EQUALITY
VARIANTs의 필드에 대한 경로를 포함한 숫자, 문자열, 이진 및 VARIANT 데이터 타입의 열입니다.
VARIANT 필드를 지정하려면 점 또는 대괄호 표기법 (예:
my_column:my_field_name.my_nested_field_name
또는my_column['my_field_name']['my_nested_field_name']
)을 사용하십시오. 콜론으로 구분된 필드 경로(예:my_column:my_field_name:my_nested_field_name
)를 사용할 수도 있습니다.VARIANT 필드를 지정하면 해당 필드 아래의 모든 중첩 필드에 구성이 적용됩니다. 예를 들어
ON EQUALITY(src:a.b)
를 지정할 경우 다음과 같습니다.이 구성으로 모든 중첩 필드(예:
src:a.b.c
,src:a.b.c.d
등)에서 쿼리on src:a.b
를 개선할 수 있습니다.이 구성은
src:a.b
접두사(예:src:a
,src:z
등)를 사용하지 않는 쿼리에는 영향을 미치지 않습니다.
SUBSTRING
VARIANTs 의 필드 경로를 포함한 문자열 또는 VARIANT 데이터 타입의 열입니다. 위의
EQUALITY
항목에서 설명한 대로 필드 경로를 지정합니다. 중첩된 필드에 대한 검색도 같은 방식으로 개선되었습니다.GEO
GEOGRAPHY 데이터 타입의 열입니다.
테이블에서 적용 가능한 모든 열을 대상으로 지정하려면 별표(
*
)를 사용하십시오.주어진 검색 방법에 대해 별표와 특정 열 이름을 모두 지정할 수는 없습니다. 하지만 다양한 검색 방법에서 별표를 지정할 수 있습니다.
예를 들어 다음 식을 지정할 수 있습니다.
-- Allowed ON SUBSTRING(*) ON EQUALITY(*), SUBSTRING(*), GEO(*)
다음 식은 지정할 수 없습니다.
-- Not allowed ON EQUALITY(*, c1) ON EQUALITY(c1, *) ON EQUALITY(v1:path, *) ON EQUALITY(c1), EQUALITY(*)
한 대상에 둘 이상의 검색 방법을 지정하려면 쉼표를 사용하여 각 후속 방법과 대상을 구분하십시오.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1), EQUALITY(c2, c3);
같은 테이블에서 ALTER TABLE … ADD SEARCH OPTIMIZATION ON … 명령을 여러 번 실행하는 경우 각 후속 명령이 테이블의 기존 구성에 추가됩니다. 예를 들어 다음 명령을 실행한다고 가정하겠습니다.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2); ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c3, c4);
그러면 열 c1, c2, c3, c4에 대한 같음 조건자가 테이블 구성에 추가됩니다. 이는 다음 명령을 실행하는 것과 같습니다.
ALTER TABLE t1 ADD SEARCH OPTIMIZATION ON EQUALITY(c1, c2, c3, c4);
예는 특정 열의 검색 최적화 활성화하기 을 참조하십시오.
DROP SEARCH OPTIMIZATION
전체 테이블에 대해, 또는 특정 열에서 선택적인 ON 절을 지정하는 경우 검색 최적화 를 제거합니다.
참고:
테이블에 검색 최적화 속성이 있는 경우 테이블을 삭제했다가 삭제를 취소하면 검색 최적화 속성이 유지됩니다.
테이블에서 검색 최적화 속성을 제거한 다음 다시 추가하면 처음 추가할 때와 똑같은 비용이 발생합니다.
ON search_method_with_target | column_name | expression_id [, ... ]
(전체 테이블에 대해 검색 최적화를 삭제하는 것이 아니라) 특정 열 또는 VARIANT 필드에 대한 검색 최적화 구성을 삭제하도록 지정합니다.
삭제할 열 구성을 식별하려면 다음 중 하나를 지정하십시오.
search_method_with_target
의 경우 열 또는 VARIANT 필드가 될 수 있는 하나 이상의 특정 대상에 대한 쿼리를 최적화하는 방법을 지정합니다. 앞서 설명한 구문 을 사용합니다.column_name
의 경우 검색 최적화를 위해 구성된 열의 이름을 지정합니다. 열 이름을 지정하면 열에서 VARIANT 필드를 사용하는 식을 포함하여 해당 열에 대한 모든 식이 삭제됩니다.expression_id
의 경우 DESCRIBE SEARCH OPTIMIZATION 명령의 출력에 나열된 식의 ID를 지정합니다.
이들 중 둘 이상을 지정하려면 항목 사이에 쉼표를 사용하십시오.
대상, 열 이름, 식 ID를 사용하여 검색 방법의 조합을 지정할 수 있습니다.
예는 특정 열의 검색 최적화 삭제하기 을 참조하십시오.
형식 유형 옵션(formatTypeOptions
)¶
형식 유형 옵션은 테이블에 데이터 로딩 및 테이블에서 데이터 언로딩 에 사용됩니다.
지정된 파일 형식 유형(STAGE_FILE_FORMAT = ( TYPE = ... )
)에 따라 다음 형식별 옵션(공백, 쉼표 또는 줄 바꿈으로 구분) 중 하나 이상을 포함할 수 있습니다.
TYPE = CSV¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
데이터를 로딩할 때 데이터 파일에 대한 현재 압축 알고리즘을 지정합니다. Snowflake는 이 옵션을 사용하여 이미 압축된 데이터 파일을 압축한 방식을 감지해 로딩을 위해 파일의 압축 데이터를 추출할 수 있습니다.
데이터를 언로딩할 때 지정된 압축 알고리즘을 사용하여 데이터 파일을 압축합니다.
- 값:
지원되는 값
참고
AUTO
데이터를 로딩할 때 현재 자동으로 감지할 수 없는 Brotli 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. 데이터를 언로딩할 때 파일은 기본값인 gzip을 사용하여 자동으로 압축됩니다.
GZIP
BZ2
BROTLI
Brotli 압축 파일을 로딩/언로딩할 때 지정해야 합니다.
ZSTD
Zstandard v0.8 이상이 지원됩니다.
DEFLATE
Deflate 압축 파일(zlib 헤더 RFC1950 포함).
RAW_DEFLATE
원시 Deflate 압축 파일(헤더 RFC1951 제외).
NONE
데이터를 로딩할 때 파일이 압축되지 않았음을 나타냅니다. 데이터를 언로딩할 때 언로딩된 파일이 압축되지 않도록 지정합니다.
- 기본값:
AUTO
RECORD_DELIMITER = 'character' | NONE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
입력 파일(데이터 로딩) 또는 언로딩된 파일(데이터 언로딩)에서 레코드를 구분하는 하나 이상의 싱글바이트 또는 멀티바이트 문자입니다. 일반적인 이스케이프 시퀀스 또는 다음 싱글바이트 또는 멀티바이트 문자를 허용합니다.
- 싱글바이트 문자:
8진수 값(
\\
접두사가 붙음) 또는 16진수 값(0x
또는\x
접두사가 붙음). 예를 들어, 곡절 악센트(^
) 문자로 구분된 레코드의 경우 8진수(\\136
) 또는 16진수(0x5e
) 값을 지정합니다.- 멀티바이트 문자:
16진수 값(
\x
접두사가 붙음). 예를 들어, 센트(¢
) 문자로 구분된 레코드의 경우 16진수(\xC2\xA2
) 값을 지정합니다.RECORD_DELIMITER 또는 FIELD_DELIMITER의 구분 기호는 다른 파일 형식 옵션(예:
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'
)에 대한 구분 기호의 하위 문자열일 수 없습니다.
지정된 구분 기호는 임의의 바이트 시퀀스가 아니라 유효한 UTF-8 문자여야 합니다. 또한, 구분 기호는 최대 20자로 제한됩니다.
NONE
의 값도 허용합니다.- 기본값:
- 데이터 로딩:
줄 바꿈 문자입니다. “줄 바꿈”은
\r\n
이 Windows 플랫폼에서 파일에 대한 줄 바꿈으로 이해되게끔 하는 논리입니다.- 데이터 언로딩:
줄 바꿈 문자(
\n
).
FIELD_DELIMITER = 'character' | NONE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
입력 파일(데이터 로딩) 또는 언로딩된 파일(데이터 언로딩)에서 필드를 구분하는 하나 이상의 싱글바이트 또는 멀티바이트 문자입니다. 일반적인 이스케이프 시퀀스 또는 다음 싱글바이트 또는 멀티바이트 문자를 허용합니다.
- 싱글바이트 문자:
8진수 값(
\\
접두사가 붙음) 또는 16진수 값(0x
또는\x
접두사가 붙음). 예를 들어, 곡절 악센트(^
) 문자로 구분된 레코드의 경우 8진수(\\136
) 또는 16진수(0x5e
) 값을 지정합니다.- 멀티바이트 문자:
16진수 값(
\x
접두사가 붙음). 예를 들어, 센트(¢
) 문자로 구분된 레코드의 경우 16진수(\xC2\xA2
) 값을 지정합니다.RECORD_DELIMITER 또는 FIELD_DELIMITER의 구분 기호는 다른 파일 형식 옵션(예:
FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb'
)에 대한 구분 기호의 하위 문자열일 수 없습니다.참고
비 ASCII 문자의 경우 결정적 동작을 얻으려면 16진수 바이트 시퀀스 값을 사용해야 합니다.
지정된 구분 기호는 임의의 바이트 시퀀스가 아니라 유효한 UTF-8 문자여야 합니다. 또한, 구분 기호는 최대 20자로 제한됩니다.
NONE
의 값도 허용합니다.- 기본값:
쉼표(
,
)
FILE_EXTENSION = 'string' | NONE
- 용도:
데이터 언로딩 전용
- 정의:
스테이지로 언로딩된 파일의 확장명을 지정합니다. 모든 확장명을 허용합니다. 원하는 소프트웨어나 서비스에서 읽을 수 있는 파일 확장명은 사용자가 지정해야 합니다.
- 기본값:
null, 즉 파일 확장명이 형식 유형
.csv[compression]
으로 결정된다는 의미로, 여기서compression
은COMPRESSION
이 설정된 경우 압축 방법에 따라 추가되는 확장명입니다.
참고
SINGLE
복사 옵션이TRUE
인 경우 COPY 명령을 실행하면 기본적으로 파일 확장명이 없는 파일이 언로딩됩니다. 파일 확장명을 지정하려면internal_location
또는external_location
경로(예:copy into @stage/data.csv
)에 파일 이름과 확장명을 입력하십시오.PARSE_HEADER = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
열 이름을 결정하기 위해 데이터 파일의 첫 번째 행 머리글을 사용할지 여부를 지정하는 부울입니다.
이 파일 형식 옵션은 다음 작업에만 적용됩니다.
INFER_SCHEMA 함수를 사용하여 열 정의를 자동으로 감지.
INFER_SCHEMA 함수 및 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 CSV 데이터를 개별 열에 로드.
이 옵션을 TRUE로 설정하면 첫 번째 행 머리글을 사용해 열 이름을 결정합니다. 기본값 FALSE로 그대로 두면 열 이름이 c 로 반환되며 여기서 는 열의 위치입니다.
PARSE_HEADER = TRUE인 경우 SKIP_HEADER 옵션은 지원되지 않습니다.
기본값:
FALSE
SKIP_HEADER = integer
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
파일 시작에서 건너뛸 줄의 개수입니다.
참고로, SKIP_HEADER는 헤더 줄이 무엇인지 결정하기 위해 RECORD_DELIMITER 또는 FIELD_DELIMITER 값을 사용하지는 않으며, 오히려 파일에서 지정된 수만큼 CRLF(캐리지 리턴, 줄 바꿈)로 구분된 줄을 건너뜁니다. 그런 다음 RECORD_DELIMITER와 FIELD_DELIMITER를 사용해 로딩할 데이터 행을 결정합니다.
- 기본값:
0
SKIP_BLANK_LINES = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
데이터 파일에서 발견되는 빈 줄을 건너뛰도록 지정하는 부울입니다. 그렇지 않으면 빈 줄로 인해 레코드 끝 오류를 발생합니다(기본 동작).
기본값:
FALSE
DATE_FORMAT = 'string' | AUTO
- 용도:
데이터 로딩 및 언로딩
- 정의:
데이터 파일(데이터 로딩) 또는 테이블(데이터 언로딩)의 날짜 값 형식을 정의합니다. 값이 지정되지 않거나
AUTO
인 경우 DATE_INPUT_FORMAT (데이터 로딩) 또는 DATE_OUTPUT_FORMAT (데이터 언로딩) 매개 변수의 값이 사용됩니다.- 기본값:
AUTO
TIME_FORMAT = 'string' | AUTO
- 용도:
데이터 로딩 및 언로딩
- 정의:
데이터 파일(데이터 로딩) 또는 테이블(데이터 언로딩)의 시간 값 형식을 정의합니다. 값이 지정되지 않거나
AUTO
인 경우 TIME_INPUT_FORMAT (데이터 로딩) 또는 TIME_OUTPUT_FORMAT (데이터 언로딩) 매개 변수의 값이 사용됩니다.- 기본값:
AUTO
TIMESTAMP_FORMAT = string' | AUTO
- 용도:
데이터 로딩 및 언로딩
- 정의:
데이터 파일(데이터 로딩) 또는 테이블(데이터 언로딩)의 타임스탬프 값 형식을 정의합니다. 값이 지정되지 않거나
AUTO
인 경우 TIMESTAMP_INPUT_FORMAT (데이터 로딩) 또는 TIMESTAMP_OUTPUT_FORMAT (데이터 언로딩) 매개 변수의 값이 사용됩니다.- 기본값:
AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8
- 용도:
데이터 로딩 및 언로딩
- 정의:
이진 입력 또는 출력의 인코딩 형식을 정의합니다. 이 옵션은 테이블의 이진 열로 데이터를 로딩하거나 이진 열에서 데이터를 언로딩할 때 사용할 수 있습니다.
- 기본값:
HEX
ESCAPE = 'character' | NONE
- 용도:
데이터 로딩 및 언로딩
- 정의:
괄호로 묶이거나 묶이지 않은 필드 값에 대한 이스케이프 문자로 사용되는 싱글바이트 문자열입니다. 이스케이프 문자는 문자 시퀀스의 후속 문자에 대한 대체 해석을 호출합니다. ESCAPE 문자를 사용하여 데이터에 있는
FIELD_OPTIONALLY_ENCLOSED_BY
문자의 인스턴스를 리터럴로 해석할 수 있습니다.일반적인 이스케이프 시퀀스, 8진수 값 또는 16진수 값을 허용합니다.
- 데이터 로딩하기:
괄호로 묶인 필드에만 이스케이프 문자를 지정합니다.
FIELD_OPTIONALLY_ENCLOSED_BY
를 설정하여 필드를 묶는 데 사용되는 문자를 지정합니다.참고
이 파일 형식 옵션은 싱글바이트 문자만 지원합니다. UTF-8 문자 인코딩은 상위 ASCII 문자를 멀티바이트 문자로 나타냅니다. 데이터 파일이 UTF-8 문자 세트로 인코딩된 경우 상위 ASCII 문자를 옵션 값으로 지정할 수 없습니다.
또한 상위 ASCII 문자를 지정하는 경우
ENCODING = 'string'
파일 형식 옵션을 데이터 파일의 문자 인코딩으로 설정하여 문자가 올바르게 해석되도록 보장하는 것이 좋습니다.- 데이터 언로딩하기:
이 옵션이 설정되면
ESCAPE_UNENCLOSED_FIELD
에 대해 설정된 이스케이프 문자를 재정의합니다.- 기본값:
NONE
ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
괄호로 묶이지 않은 필드 값에 대해서만 이스케이프 문자로 사용되는 싱글바이트 문자열입니다. 이스케이프 문자는 문자 시퀀스의 후속 문자에 대한 대체 해석을 호출합니다. ESCAPE 문자를 사용하여 데이터에 있는
FIELD_DELIMITER
또는RECORD_DELIMITER
문자의 인스턴스를 리터럴로 해석할 수 있습니다. 이스케이프 문자는 데이터에서 자신의 인스턴스를 이스케이프하는 데 사용할 수도 있습니다.일반적인 이스케이프 시퀀스, 8진수 값 또는 16진수 값을 허용합니다.
- 데이터 로딩하기:
괄호로 묶이지 않은 필드에만 이스케이프 문자를 지정합니다.
참고
기본값은
\\
입니다. 데이터 파일의 행이 백슬래시(\
) 문자로 끝날 경우 이 문자는RECORD_DELIMITER
파일 형식 옵션에 대해 지정된 줄 바꿈 또는 캐리지 리턴 문자를 이스케이프합니다. 결과적으로, 로딩 작업에서 이 행과 다음 행을 단일 데이터 행으로 처리합니다. 이 문제를 방지하려면 값을NONE
으로 설정하십시오.이 파일 형식 옵션은 싱글바이트 문자만 지원합니다. UTF-8 문자 인코딩은 상위 ASCII 문자를 멀티바이트 문자로 나타냅니다. 데이터 파일이 UTF-8 문자 세트로 인코딩된 경우 상위 ASCII 문자를 옵션 값으로 지정할 수 없습니다.
또한 상위 ASCII 문자를 지정하는 경우
ENCODING = 'string'
파일 형식 옵션을 데이터 파일의 문자 인코딩으로 설정하여 문자가 올바르게 해석되도록 보장하는 것이 좋습니다.
- 데이터 언로딩하기:
ESCAPE
가 설정된 경우 해당 파일 형식 옵션에 대해 설정된 이스케이프 문자가 이 옵션을 재정의합니다.- 기본값:
백슬래시(
\\
)
TRIM_SPACE = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
필드에서 공백을 제거할지 여부를 지정하는 부울입니다.
예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을
TRUE
로 설정하십시오.또 다른 예로, 선행 또는 후행 공백이 문자열을 묶는 따옴표 주위에 있는 경우 이 옵션을 사용하여 주위의 공백을 제거하고
FIELD_OPTIONALLY_ENCLOSED_BY
옵션을 사용하여 따옴표를 제거할 수 있습니다. 따옴표 안의 모든 공백은 그대로 유지됩니다. 예를 들어FIELD_DELIMITER = '|'
및FIELD_OPTIONALLY_ENCLOSED_BY = '"'
를 가정하면 다음과 같습니다.|"Hello world"| /* loads as */ >Hello world< |" Hello world "| /* loads as */ > Hello world < | "Hello world" | /* loads as */ >Hello world<
(이 예에서 대괄호는 로딩되지 않습니다. 대괄호는 로딩된 문자열의 시작과 끝의 경계를 정하는 데 사용됩니다.)
- 기본값:
FALSE
FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
문자열을 묶는 데 사용되는 문자입니다. 값은
NONE
, 작은따옴표 문자('
) 또는 큰따옴표 문자("
)일 수 있습니다. 작은따옴표 문자를 사용하려면 8진수 또는 16진수 표현(0x27
) 또는 이중 작은따옴표로 묶인 이스케이프(''
)를 사용하십시오.필드에 이 문자가 포함된 경우 같은 문자를 사용하여 이스케이프합니다. 예를 들어 값이 큰따옴표 문자이고 필드에 문자열
A "B" C
가 포함된 경우 다음과 같이 큰따옴표를 이스케이프합니다.A ""B"" C
- 기본값:
NONE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
SQL NULL로 변환하거나 그 반대로 변환하는 데 사용되는 문자열:
데이터를 로딩할 때 Snowflake는 데이터 로딩 소스에서 이러한 값을 SQL NULL로 바꿉니다. 둘 이상의 문자열을 지정하려면 문자열 목록을 괄호로 묶고 쉼표를 사용하여 각각의 값을 구분합니다.
Snowflake는 데이터 타입과 관계없이 값의 모든 인스턴스를 NULL로 변환합니다. 예를 들어
2
가 값으로 지정되면2
의 모든 인스턴스가 문자열 또는 숫자로 변환됩니다.예:
NULL_IF = ('\N', 'NULL', 'NUL', '')
이 옵션에는 빈 문자열이 포함될 수 있습니다.
데이터를 언로딩할 때, Snowflake는 SQL NULL 값을 목록의 첫 번째 값으로 변환합니다.
- 기본값:
\\N
(즉,ESCAPE_UNENCLOSED_FIELD
값이\\
인 것으로 가정하는 NULL)
ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
입력 파일의 구분된 열(즉, 필드) 수가 해당 테이블의 열 수와 일치하지 않는 경우 구문 분석 오류를 생성할지 여부를 지정하는 부울입니다.
FALSE
로 설정하면 오류가 발생하지 않고 로딩이 계속됩니다. 파일이 성공적으로 로딩된 경우 다음과 같습니다.입력 파일에 테이블의 열보다 많은 수의 필드가 있는 레코드가 포함된 경우 일치하는 필드는 파일에서 나오는 순서대로 로딩되고 나머지 필드는 로딩되지 않습니다.
입력 파일에 테이블의 열보다 적은 수의 필드가 있는 레코드가 포함된 경우 테이블에서 일치하지 않는 열이 NULL 값과 함께 로딩됩니다.
이 옵션에서는 입력 파일 내의 모든 레코드가 같은 길이라고 가정합니다(즉, 이 매개 변수에 대해 지정된 값과 관계없이 다양한 길이의 레코드를 포함한 파일이 오류를 반환함).
- 기본값:
TRUE
참고
로딩하는 동안 데이터 변환 시(즉, 쿼리를 COPY 명령의 소스로 사용), 이 옵션은 무시됩니다. 데이터 파일의 열 개수 및 순서는 대상 테이블과 같지 않아도 됩니다.
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
유효하지 않은 UTF-8 문자를 유니코드 대체 문자(
�
)로 대체할지 여부를 지정하는 부울.
TRUE
로 설정하면 Snowflake가 잘못된 UTF-8 문자를 유니코드 대체 문자로 바꿉니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
EMPTY_FIELD_AS_NULL = TRUE | FALSE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
데이터를 로딩할 때 두 개의 연속적인 구분 기호(예:
,,
)로 표시되는 입력 파일의 빈 필드에 SQL NULL을 삽입할지 여부를 지정합니다.FALSE
로 설정하면 Snowflake가 빈 필드를 해당 열 타입으로 캐스팅하려고 시도합니다. STRING 유형의 열에 빈 문자열이 삽입됩니다. 다른 열 타입의 경우 COPY 명령에서 오류가 발생합니다.데이터를 언로딩할 때 이 옵션은
FIELD_OPTIONALLY_ENCLOSED_BY
와 함께 사용됩니다.FIELD_OPTIONALLY_ENCLOSED_BY = NONE
일 때,EMPTY_FIELD_AS_NULL = FALSE
를 설정하면 필드 값을 묶는 따옴표 없이 빈 문자열 값으로 테이블의 빈 문자열을 언로딩하도록 지정됩니다.TRUE
로 설정하면FIELD_OPTIONALLY_ENCLOSED_BY
가 문자열을 묶을 문자를 지정해야 합니다.
- 기본값:
TRUE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
데이터 파일에 있는 경우 BOM(바이트 순서 표시)를 건너뛸지 여부를 지정하는 부울입니다. BOM은 데이터 파일의 시작 부분에서 바이트 순서와 인코딩 형식을 정의하는 문자 코드입니다.
FALSE
로 설정하면 Snowflake가 데이터 파일에 있는 모든 BOM을 인식하므로, BOM에서 오류가 발생하거나 테이블의 첫 번째 열에 병합되는 결과가 될 수 있습니다.- 기본값:
TRUE
ENCODING = 'string'
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
데이터를 테이블로 로딩할 때 원본 데이터의 문자 세트를 지정하는 문자열(상수)입니다.
문자 세트
ENCODING
값지원되는 언어
참고
Big5
BIG5
중국어 번체
EUC-JP
EUCJP
일본어
EUC-KR
EUCKR
한국어
GB18030
GB18030
중국어
IBM420
IBM420
아랍어
IBM424
IBM424
히브리어
IBM949
IBM949
한국어
ISO-2022-CN
ISO2022CN
중국어 간체
ISO-2022-JP
ISO2022JP
일본어
ISO-2022-KR
ISO2022KR
한국어
ISO-8859-1
ISO88591
덴마크어, 네덜란드어, 영어, 프랑스어, 독일어, 이탈리아어, 노르웨이어, 포르투갈어, 스웨덴어
ISO-8859-2
ISO88592
체코어, 헝가리어, 폴란드어, 루마니아어
ISO-8859-5
ISO88595
러시아어
ISO-8859-6
ISO88596
아랍어
ISO-8859-7
ISO88597
그리스어
ISO-8859-8
ISO88598
히브리어
ISO-8859-9
ISO88599
터키어
ISO-8859-15
ISO885915
덴마크어, 네덜란드어, 영어, 프랑스어, 독일어, 이탈리아어, 노르웨이어, 포르투갈어, 스웨덴어
유로화 기호를 포함하여, 8자를 제외하면 ISO-8859-1과 동일합니다.
KOI8-R
KOI8R
러시아어
Shift_JIS
SHIFTJIS
일본어
UTF-8
UTF8
모든 언어
구분된 파일(CSV, TSV 등)에서 데이터를 로딩하는 경우 UTF-8이 기본값입니다. . . 지원되는 다른 모든 파일 형식(JSON, Avro 등)에서 데이터를 로딩할 뿐 아니라 언로딩하는 경우 UTF-8이 유일하게 지원되는 문자 세트입니다.
UTF-16
UTF16
모든 언어
UTF-16BE
UTF16BE
모든 언어
UTF-16LE
UTF16LE
모든 언어
UTF-32
UTF32
모든 언어
UTF-32BE
UTF32BE
모든 언어
UTF-32LE
UTF32LE
모든 언어
windows-949
WINDOWS949
한국어
windows-1250
WINDOWS1250
체코어, 헝가리어, 폴란드어, 루마니아어
windows-1251
WINDOWS1251
러시아어
windows-1252
WINDOWS1252
덴마크어, 네덜란드어, 영어, 프랑스어, 독일어, 이탈리아어, 노르웨이어, 포르투갈어, 스웨덴어
windows-1253
WINDOWS1253
그리스어
windows-1254
WINDOWS1254
터키어
windows-1255
WINDOWS1255
히브리어
windows-1256
WINDOWS1256
아랍어
- 기본값:
UTF8
참고
Snowflake는 모든 데이터를 UTF-8 문자 세트에 내부적으로 저장합니다. 데이터는 UTF-8로 변환된 후 Snowflake에 로딩됩니다.
TYPE = JSON¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
데이터를 로딩할 때 데이터 파일에 대한 현재 압축 알고리즘을 지정합니다. Snowflake는 이 옵션을 사용하여 이미 압축된 데이터 파일을 압축한 방식을 감지해 로딩을 위해 파일의 압축 데이터를 추출할 수 있습니다.
데이터를 언로딩할 때 지정된 압축 알고리즘을 사용하여 데이터 파일을 압축합니다.
- 값:
지원되는 값
참고
AUTO
데이터를 로딩할 때 현재 자동으로 감지할 수 없는 Brotli 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. 데이터를 언로딩할 때 파일은 기본값인 gzip을 사용하여 자동으로 압축됩니다.
GZIP
BZ2
BROTLI
Brotli 압축 파일을 로딩/언로딩할 경우 지정해야 합니다.
ZSTD
Zstandard v0.8 이상이 지원됩니다.
DEFLATE
Deflate 압축 파일(zlib 헤더 RFC1950 포함).
RAW_DEFLATE
원시 Deflate 압축 파일(헤더 RFC1951 제외).
NONE
데이터를 로딩할 때 파일이 압축되지 않았음을 나타냅니다. 데이터를 언로딩할 때 언로딩된 파일이 압축되지 않도록 지정합니다.
- 기본값:
AUTO
DATE_FORMAT = 'string' | AUTO
- 용도:
데이터 로딩 전용
- 정의:
데이터 파일에서 날짜 문자열 값 형식을 정의합니다. 값이 지정되지 않거나
AUTO
인 경우 DATE_INPUT_FORMAT 매개 변수의 값이 사용됩니다.이 파일 형식 옵션은 다음 작업에만 적용됩니다.
MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 JSON 데이터를 별도의 열에 로딩하는 작업.
COPY 문에 쿼리를 지정하여 별개의 열에 JSON 데이터를 로딩하는 작업(즉, COPY 변환).
- 기본값:
AUTO
TIME_FORMAT = 'string' | AUTO
- 용도:
데이터 로딩 전용
- 정의:
데이터 파일에서 시간 문자열 값 형식을 정의합니다. 값이 지정되지 않거나
AUTO
인 경우 TIME_INPUT_FORMAT 매개 변수의 값이 사용됩니다.이 파일 형식 옵션은 다음 작업에만 적용됩니다.
MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 JSON 데이터를 별도의 열에 로딩하는 작업.
COPY 문에 쿼리를 지정하여 별개의 열에 JSON 데이터를 로딩하는 작업(즉, COPY 변환).
- 기본값:
AUTO
TIMESTAMP_FORMAT = string' | AUTO
- 용도:
데이터 로딩 전용
- 정의:
데이터 파일에서 타임스탬프 문자열 값 형식을 정의합니다. 값이 지정되지 않거나
AUTO
인 경우 TIMESTAMP_INPUT_FORMAT 매개 변수의 값이 사용됩니다.이 파일 형식 옵션은 다음 작업에만 적용됩니다.
MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 JSON 데이터를 별도의 열에 로딩하는 작업.
COPY 문에 쿼리를 지정하여 별개의 열에 JSON 데이터를 로딩하는 작업(즉, COPY 변환).
- 기본값:
AUTO
BINARY_FORMAT = HEX | BASE64 | UTF8
- 용도:
데이터 로딩 전용
- 정의:
데이터 파일의 이진 문자열 값에 대한 인코딩 형식을 정의합니다. 이 옵션은 테이블의 이진 열로 데이터를 로딩할 때 사용할 수 있습니다.
이 파일 형식 옵션은 다음 작업에만 적용됩니다.
MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 JSON 데이터를 별도의 열에 로딩하는 작업.
COPY 문에 쿼리를 지정하여 별개의 열에 JSON 데이터를 로딩하는 작업(즉, COPY 변환).
- 기본값:
HEX
TRIM_SPACE = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
문자열에서 선행 공백과 후행 공백을 제거할지 여부를 지정하는 부울입니다.
예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을
TRUE
로 설정하십시오.이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 JSON 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
- 기본값:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 용도:
데이터 로딩 전용
- 정의:
SQL NULL로 변환하거나 그 반대로 변환하는 데 사용되는 문자열입니다. Snowflake는 데이터 로딩 소스의 이러한 문자열을 SQL NULL로 바꿉니다. 둘 이상의 문자열을 지정하려면 문자열 목록을 괄호로 묶고 쉼표를 사용하여 각각의 값을 구분합니다.
이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 JSON 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
Snowflake는 데이터 타입과 관계없이 값의 모든 인스턴스를 NULL로 변환합니다. 예를 들어
2
가 값으로 지정되면2
의 모든 인스턴스가 문자열 또는 숫자로 변환됩니다.예:
NULL_IF = ('\N', 'NULL', 'NUL', '')
이 옵션에는 빈 문자열이 포함될 수 있습니다.
- 기본값:
\\N
(즉,ESCAPE_UNENCLOSED_FIELD
값이\\
인 것으로 가정하는 NULL)
FILE_EXTENSION = 'string' | NONE
- 용도:
데이터 언로딩 전용
- 정의:
스테이지로 언로딩된 파일의 확장명을 지정합니다. 모든 확장명을 허용합니다. 원하는 소프트웨어나 서비스에서 읽을 수 있는 파일 확장명은 사용자가 지정해야 합니다.
- 기본값:
null, 즉 파일 확장명이 형식 유형
.json[compression]
으로 결정된다는 의미로, 여기서compression
은COMPRESSION
이 설정된 경우 압축 방법에 따라 추가되는 확장명입니다.
ENABLE_OCTAL = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
8진수 숫자의 구문 분석을 할 수 있게 해주는 부울입니다.
- 기본값:
FALSE
ALLOW_DUPLICATE = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
중복 오브젝트 필드 이름을 허용하도록 지정하는 부울입니다(마지막 이름만 보존됨).
- 기본값:
FALSE
STRIP_OUTER_ARRAY = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
JSON 파서에 바깥쪽 대괄호(즉,
[ ]
)를 제거하도록 지시하는 부울입니다.- 기본값:
FALSE
STRIP_NULL_VALUES = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
JSON 파서에
null
값이 포함된 오브젝트 필드 또는 배열 요소를 제거하도록 지시하는 부울입니다. 예를 들어TRUE
로 설정할 경우 다음과 같습니다.이전
이후
[null]
[]
[null,null,3]
[,,3]
{"a":null,"b":null,"c":123}
{"c":123}
{"a":[1,null,2],"b":{"x":null,"y":88}}
{"a":[1,,2],"b":{"y":88}}
- 기본값:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
유효하지 않은 UTF-8 문자를 유니코드 대체 문자(
�
)로 대체할지 여부를 지정하는 부울. 이 옵션은 일대일 문자 대체를 수행합니다.- 값:
TRUE
로 설정하면 Snowflake가 잘못된 UTF-8 문자를 유니코드 대체 문자로 바꿉니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
IGNORE_UTF8_ERRORS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
UTF-8 인코딩 오류가 오류 조건을 생성하는지 여부를 지정하는 부울입니다. 이는
REPLACE_INVALID_CHARACTERS
의 대체 구문입니다.- 값:
TRUE
로 설정하면 잘못된 UTF-8 시퀀스가 전부 유니코드 문자U+FFFD
(즉, “대체 문자”)로 자동으로 바뀝니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
데이터 파일에 있는 경우 BOM(바이트 순서 표시)를 건너뛸지 여부를 지정하는 부울입니다. BOM은 데이터 파일의 시작 부분에서 바이트 순서와 인코딩 형식을 정의하는 문자 코드입니다.
FALSE
로 설정하면 Snowflake가 데이터 파일에 있는 모든 BOM을 인식하므로, BOM에서 오류가 발생하거나 테이블의 첫 번째 열에 병합되는 결과가 될 수 있습니다.- 기본값:
TRUE
TYPE = AVRO¶
COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 용도:
데이터 로딩 전용
- 정의:
데이터를 로딩할 때 데이터 파일에 대한 현재 압축 알고리즘을 지정합니다. Snowflake는 이 옵션을 사용하여 이미 압축된 데이터 파일을 압축한 방식을 감지해 로딩을 위해 파일의 압축 데이터를 추출할 수 있습니다.
데이터를 언로딩할 때 지정된 압축 알고리즘을 사용하여 데이터 파일을 압축합니다.
- 값:
지원되는 값
참고
AUTO
데이터를 로딩할 때 현재 자동으로 감지할 수 없는 Brotli 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. 데이터를 언로딩할 때 파일은 기본값인 gzip을 사용하여 자동으로 압축됩니다.
GZIP
BROTLI
Brotli 압축 파일을 로딩/언로딩할 경우 지정해야 합니다.
ZSTD
Zstandard v0.8 이상이 지원됩니다.
DEFLATE
Deflate 압축 파일(zlib 헤더 RFC1950 포함).
RAW_DEFLATE
원시 Deflate 압축 파일(헤더 RFC1951 제외).
NONE
데이터를 로딩할 때 파일이 압축되지 않았음을 나타냅니다. 데이터를 언로딩할 때 언로딩된 파일이 압축되지 않도록 지정합니다.
- 기본값:
AUTO
.
참고
기본 AUTO
옵션으로 파일 및 코덱 압축이 모두 결정되므로 기본 옵션을 사용하는 것이 좋습니다. 압축 옵션 지정은 블록(코덱) 압축이 아닌 파일 압축을 가리킵니다.
TRIM_SPACE = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
문자열에서 선행 공백과 후행 공백을 제거할지 여부를 지정하는 부울입니다.
예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을
TRUE
로 설정하십시오.이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Avro 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
- 기본값:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
유효하지 않은 UTF-8 문자를 유니코드 대체 문자(
�
)로 대체할지 여부를 지정하는 부울. 이 옵션은 일대일 문자 대체를 수행합니다.- 값:
TRUE
로 설정하면 Snowflake가 잘못된 UTF-8 문자를 유니코드 대체 문자로 바꿉니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 용도:
데이터 로딩 전용
- 정의:
SQL NULL로 변환하거나 그 반대로 변환하는 데 사용되는 문자열입니다. Snowflake는 데이터 로딩 소스의 이러한 문자열을 SQL NULL로 바꿉니다. 둘 이상의 문자열을 지정하려면 문자열 목록을 괄호로 묶고 쉼표를 사용하여 각각의 값을 구분합니다.
이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Avro 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
Snowflake는 데이터 타입과 관계없이 값의 모든 인스턴스를 NULL로 변환합니다. 예를 들어
2
가 값으로 지정되면2
의 모든 인스턴스가 문자열 또는 숫자로 변환됩니다.예:
NULL_IF = ('\N', 'NULL', 'NUL', '')
이 옵션에는 빈 문자열이 포함될 수 있습니다.
- 기본값:
\\N
(즉,ESCAPE_UNENCLOSED_FIELD
값이\\
인 것으로 가정하는 NULL)
TYPE = ORC¶
TRIM_SPACE = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
문자열에서 선행 공백과 후행 공백을 제거할지 여부를 지정하는 부울입니다.
예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을
TRUE
로 설정하십시오.이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Orc 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
- 기본값:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
유효하지 않은 UTF-8 문자를 유니코드 대체 문자(
�
)로 대체할지 여부를 지정하는 부울. 이 옵션은 일대일 문자 대체를 수행합니다.- 값:
TRUE
로 설정하면 Snowflake가 잘못된 UTF-8 문자를 유니코드 대체 문자로 바꿉니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
SQL NULL로 변환하거나 그 반대로 변환하는 데 사용되는 문자열입니다. Snowflake는 데이터 로딩 소스의 이러한 문자열을 SQL NULL로 바꿉니다. 둘 이상의 문자열을 지정하려면 문자열 목록을 괄호로 묶고 쉼표를 사용하여 각각의 값을 구분합니다.
이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Orc 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
Snowflake는 데이터 타입과 관계없이 값의 모든 인스턴스를 NULL로 변환합니다. 예를 들어
2
가 값으로 지정되면2
의 모든 인스턴스가 문자열 또는 숫자로 변환됩니다.예:
NULL_IF = ('\N', 'NULL', 'NUL', '')
이 옵션에는 빈 문자열이 포함될 수 있습니다.
- 기본값:
\\N
(즉,ESCAPE_UNENCLOSED_FIELD
값이\\
인 것으로 가정하는 NULL)
TYPE = PARQUET¶
COMPRESSION = AUTO | LZO | SNAPPY | NONE
- 용도:
데이터 로딩, 데이터 언로딩, 외부 테이블
- 정의:
데이터를 로딩할 때 Parquet 파일의 열에 대한 현재 압축 알고리즘을 지정합니다.
데이터를 언로딩할 때 지정된 압축 알고리즘을 사용하여 데이터 파일을 압축합니다.
- 값:
지원되는 값
참고
AUTO
데이터를 로딩할 때 압축 알고리즘이 자동으로 감지됩니다. Brotli, gzip, Lempel-Ziv-Oberhumer(LZO), LZ4, Snappy 또는 Zstandard v0.8 이상의 압축 알고리즘을 지원합니다. . 데이터를 언로딩할 때 언로딩된 파일은 기본적으로 Snappy 압축 알고리즘을 사용하여 압축됩니다.
LZO
데이터를 언로딩할 때 파일은 기본적으로 Snappy 알고리즘을 사용하여 압축됩니다. 데이터를 LZO 압축 파일로 언로딩하는 경우 이 값을 지정합니다.
SNAPPY
데이터를 언로딩할 때 파일은 기본적으로 Snappy 알고리즘을 사용하여 압축됩니다. 이 값을 선택적으로 지정할 수 있습니다.
NONE
데이터를 로딩할 때 파일이 압축되지 않았음을 나타냅니다. 데이터를 언로딩할 때 언로딩된 파일이 압축되지 않도록 지정합니다.
- 기본값:
AUTO
SNAPPY_COMPRESSION = TRUE | FALSE
- 용도:
데이터 언로딩 전용
지원되는 값
참고
AUTO
업로드된 파일은 기본적으로 Snappy 압축 알고리즘을 사용하여 압축됩니다.
SNAPPY
Snappy 압축 파일을 언로딩하는 경우 지정할 수 있습니다.
NONE
데이터를 로딩할 때 파일이 압축되지 않았음을 나타냅니다. 데이터를 언로딩할 때 언로딩된 파일이 압축되지 않도록 지정합니다.
- 정의:
언로딩된 파일이 SNAPPY 알고리즘을 사용하여 압축되는지 여부를 지정하는 부울입니다.
참고
사용되지 않음.
COMPRESSION = SNAPPY
를 대신 사용하십시오.- 제한 사항:
데이터 언로딩 작업용으로만 지원됩니다.
- 기본값:
TRUE
BINARY_AS_TEXT = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
정의된 논리 데이터 타입이 없는 열을 UTF-8 텍스트로 해석할지 여부를 지정하는 부울입니다.
FALSE
로 설정하면 Snowflake가 이러한 열을 이진 데이터로 해석합니다.- 기본값:
TRUE
참고
잠재적인 변환 문제를 방지하도록 BINARY_AS_TEXT를 FALSE로 설정하는 것이 좋습니다.
TRIM_SPACE = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
문자열에서 선행 공백과 후행 공백을 제거할지 여부를 지정하는 부울입니다.
예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을
TRUE
로 설정하십시오.이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Parquet 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
- 기본값:
FALSE
USE_LOGICAL_TYPE = TRUE | FALSE
- 용도:
데이터 로딩, 스테이징된 파일의 데이터 쿼리, 스키마 감지.
- 정의:
Parquet 논리 유형을 사용할지 여부를 지정하는 부울입니다. Snowflake는 이 파일 형식 옵션으로 데이터 로드 중에 Parquet 논리 유형을 해석할 수 있습니다. 자세한 내용은 Parquet 논리 유형 정의 를 참조하십시오. Parquet 논리 유형을 활성화하려면 새 파일 형식 옵션을 생성할 때 USE_LOGICAL_TYPE을 TRUE로 설정하십시오.
- 제한 사항:
데이터 언로딩에는 지원되지 않습니다.
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
유효하지 않은 UTF-8 문자를 유니코드 대체 문자(
�
)로 대체할지 여부를 지정하는 부울. 이 옵션은 일대일 문자 대체를 수행합니다.- 값:
TRUE
로 설정하면 Snowflake가 잘못된 UTF-8 문자를 유니코드 대체 문자로 바꿉니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
NULL_IF = ( 'string1' [ , 'string2' , ... ] )
- 용도:
데이터 로딩 전용
- 정의:
SQL NULL로 변환하거나 그 반대로 변환하는 데 사용되는 문자열입니다. Snowflake는 데이터 로딩 소스의 이러한 문자열을 SQL NULL로 바꿉니다. 둘 이상의 문자열을 지정하려면 문자열 목록을 괄호로 묶고 쉼표를 사용하여 각각의 값을 구분합니다.
이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Parquet 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.
Snowflake는 데이터 타입과 관계없이 값의 모든 인스턴스를 NULL로 변환합니다. 예를 들어
2
가 값으로 지정되면2
의 모든 인스턴스가 문자열 또는 숫자로 변환됩니다.예:
NULL_IF = ('\N', 'NULL', 'NUL', '')
이 옵션에는 빈 문자열이 포함될 수 있습니다.
- 기본값:
\\N
(즉,ESCAPE_UNENCLOSED_FIELD
값이\\
인 것으로 가정하는 NULL)
TYPE = XML¶
COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
- 용도:
데이터 로딩 전용
- 정의:
데이터를 로딩할 때 데이터 파일에 대한 현재 압축 알고리즘을 지정합니다. Snowflake는 이 옵션을 사용하여 이미 압축된 데이터 파일을 압축한 방식을 감지해 로딩을 위해 파일의 압축 데이터를 추출할 수 있습니다.
데이터를 언로딩할 때 지정된 압축 알고리즘을 사용하여 데이터 파일을 압축합니다.
- 값:
지원되는 값
참고
AUTO
데이터를 로딩할 때 현재 자동으로 감지할 수 없는 Brotli 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. 데이터를 언로딩할 때 파일은 기본값인 gzip을 사용하여 자동으로 압축됩니다.
GZIP
BZ2
BROTLI
Brotli 압축 파일을 로딩/언로딩할 경우 지정해야 합니다.
ZSTD
Zstandard v0.8 이상이 지원됩니다.
DEFLATE
Deflate 압축 파일(zlib 헤더 RFC1950 포함).
RAW_DEFLATE
원시 Deflate 압축 파일(헤더 RFC1951 제외).
NONE
데이터를 로딩할 때 파일이 압축되지 않았음을 나타냅니다. 데이터를 언로딩할 때 언로딩된 파일이 압축되지 않도록 지정합니다.
- 기본값:
AUTO
IGNORE_UTF8_ERRORS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
UTF-8 인코딩 오류가 오류 조건을 생성하는지 여부를 지정하는 부울입니다. 이는
REPLACE_INVALID_CHARACTERS
의 대체 구문입니다.- 값:
TRUE
로 설정하면 잘못된 UTF-8 시퀀스가 전부 유니코드 문자U+FFFD
(즉, “대체 문자”)로 자동으로 바뀝니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
PRESERVE_SPACE = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
XML 파서가 요소 콘텐츠의 선행 및 후행 공백을 보존할지 여부를 지정하는 부울입니다.
- 기본값:
FALSE
STRIP_OUTER_ELEMENT = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
XML 파서가 외부 XML 요소를 제거하여 2차 수준 요소를 별개의 문서로 노출할지 여부를 지정하는 부울입니다.
- 기본값:
FALSE
DISABLE_SNOWFLAKE_DATA = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
XML 파서가 Snowflake 반정형 데이터 태그를 인식하지 못하게 할지 여부를 지정하는 부울입니다.
- 기본값:
FALSE
DISABLE_AUTO_CONVERT = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
XML 파서가 숫자 값과 부울 값을 텍스트에서 기본 표현으로 자동 변환하지 못하게 할지 여부를 지정하는 부울입니다.
- 기본값:
FALSE
REPLACE_INVALID_CHARACTERS = TRUE | FALSE
- 용도:
데이터 로딩 및 외부 테이블
- 정의:
유효하지 않은 UTF-8 문자를 유니코드 대체 문자(
�
)로 대체할지 여부를 지정하는 부울. 이 옵션은 일대일 문자 대체를 수행합니다.- 값:
TRUE
로 설정하면 Snowflake가 잘못된 UTF-8 문자를 유니코드 대체 문자로 바꿉니다.FALSE
로 설정하면 잘못된 UTF-8 문자 인코딩이 감지될 때 로딩 작업에서 오류가 발생합니다.- 기본값:
FALSE
SKIP_BYTE_ORDER_MARK = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
입력 파일에 있는 모든 BOM(바이트 순서 표시)을 건너뛸지 여부를 지정하는 부울입니다. BOM은 데이터 파일의 시작 부분에서 바이트 순서와 인코딩 형식을 정의하는 문자 코드입니다.
FALSE
로 설정하면 Snowflake가 데이터 파일에 있는 모든 BOM을 인식하므로, BOM에서 오류가 발생하거나 테이블의 첫 번째 열에 병합되는 결과가 될 수 있습니다.- 기본값:
TRUE
복사 옵션(copyOptions
)¶
복사 옵션은 테이블에 데이터 로딩 및 테이블에서 데이터 언로딩 에 사용됩니다.
다음 복사 옵션(공백, 쉼표 또는 줄 바꿈으로 구분) 중 하나 이상을 지정할 수 있습니다.
ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_num | 'SKIP_FILE_num%' | ABORT_STATEMENT
- 용도:
데이터 로딩 전용
- 정의:
로딩 작업에 대한 오류 처리를 지정하는 문자열(상수)입니다.
중요
ON_ERROR 복사 옵션 값을 신중하게 고려하십시오. 기본값은 일반적인 시나리오에서 적절하지만, 항상 최상의 옵션인 것은 아닙니다.
- 값:
CONTINUE
오류가 발견된 경우 파일을 계속 로딩합니다. COPY 문은 데이터 파일당 최대 하나의 오류가 발견된 경우 오류 메시지를 반환합니다.
ROWS_PARSED 열 값과 ROWS_LOADED 열 값의 차는 검색된 오류를 포함하는 행의 개수를 나타냅니다. 하지만 이들 행의 각각에 여러 개의 오류가 포함될 수 있습니다. 데이터 파일의 모든 오류를 보려면 VALIDATION_MODE 매개 변수를 사용하거나 VALIDATE 함수를 쿼리하십시오.
SKIP_FILE
오류가 발견된 경우 파일을 건너뜁니다.
SKIP_FILE
작업은 오류 발견 여부와 관계없이 전체 파일을 버퍼링합니다. 이러한 이유로SKIP_FILE
은CONTINUE
또는ABORT_STATEMENT
보다 느립니다. 적은 수의 오류로 인해 큰 파일을 건너뛰면 지연이 발생하고 크레딧이 낭비될 수 있습니다. 논리적 설명이 없는 파일에서 많은 수의 레코드를 로딩할 때(예: 파일이 대략적인 간격으로 자동 생성됨) 대신CONTINUE
를 지정하는 것이 좋습니다.추가 패턴:
SKIP_FILE_num
(예:SKIP_FILE_10
)파일에서 발견된 오류 행 수가 지정된 수와 같거나 초과하면 파일을 건너뜁니다.
'SKIP_FILE_num%'
(예:'SKIP_FILE_10%'
)파일에서 발견된 오류 행의 백분율이 지정된 백분율을 초과하면 파일을 건너뜁니다.
ABORT_STATEMENT
데이터 파일에서 오류가 발견되면 로딩 작업을 중단합니다.
FILES
매개 변수에 명시적으로 지정된 데이터 파일을 찾을 수 없는 경우를 제외하고, (예컨대 존재하지 않거나 액세스할 수 없어) 데이터 파일을 찾을 수 없는 경우에는 로딩 작업이 중단되지 않습니다.
- 기본값:
- COPY를 사용한 대량 로딩:
ABORT_STATEMENT
- Snowpipe:
SKIP_FILE
SIZE_LIMIT = num
- 용도:
데이터 로딩 전용
- 정의:
주어진 COPY 문에 대해 로딩할 데이터의 최대 크기(바이트)를 지정하는 (0보다 큰) 숫자입니다. 임계값을 초과하면 COPY 작업에서 파일 로딩이 중단됩니다. 이 옵션은 일반적으로 여러 COPY 문을 사용하여 공통 파일 그룹을 로딩하는 데 사용됩니다. 각각의 문에 대해 지정된
SIZE_LIMIT
값을 초과할 때까지 데이터 로딩이 계속된 후에 그다음 문으로 이동합니다.예를 들어, 스테이지 경로에 있는 파일 세트의 크기가 각각 10MB라고 해봅시다. 여러 COPY 문이 SIZE_LIMIT를
25000000
(25MB)로 설정하면 각각 3개의 파일을 로딩합니다. 즉,SIZE_LIMIT
임계값을 초과하면 각 COPY 작업이 중단됩니다.로딩할 파일이 하나라도 있다면
SIZE_LIMIT
에 대해 지정된 값과 관계없이 최소한 한 개의 파일이 로딩됩니다.- 기본값:
null(크기 제한 없음)
PURGE = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
데이터가 성공적으로 로딩된 후 스테이지에서 데이터 파일을 자동으로 제거할지 여부를 지정하는 부울입니다.
이 옵션을
TRUE
로 설정하면 성공적으로 로딩된 데이터 파일을 제거하기 위한 최선의 노력이 이루어집니다. 어떤 이유로든 제거 작업이 실패할 경우 현재는 아무런 오류도 반환되지 않습니다. 따라서 (LIST 를 사용하여) 스테이징된 파일을 주기적으로 나열하고 성공적으로 로딩된 파일이 있는 경우 이를 수동으로 제거하는 것이 좋습니다.- 기본값:
FALSE
RETURN_FAILED_ONLY = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
문 결과에서 로딩하지 못한 파일만 반환할지 여부를 지정하는 부울입니다.
- 기본값:
FALSE
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
- 용도:
데이터 로딩 전용
- 정의:
데이터에 표시된 해당 열과 일치하는 대상 테이블의 열로 반정형 데이터를 로딩할지 여부를 지정하는 문자열입니다.
이 복사 옵션은 다음 데이터 타입에 대해 지원됩니다.
JSON
Avro
ORC
Parquet
열이 일치하려면 다음 기준을 충족해야 합니다.
데이터에 표시된 열의 이름이 테이블에 있는 열의 이름과 정확히 같아야 합니다. 이 복사 옵션은 열 이름의 대/소문자 구분을 지원합니다. 열 순서는 중요하지 않습니다.
테이블의 열에 있는 데이터 타입이 데이터에 표시된 열의 값과 호환되어야 합니다. 예를 들어, 문자열, 숫자, 부울 값을 모두 베리언트 열에 로딩할 수 있습니다.
- 값:
CASE_SENSITIVE
|CASE_INSENSITIVE
데이터에 표시된 해당 열과 일치하는 대상 테이블의 열로 반정형 데이터를 로딩합니다. 열 이름은 대/소문자를 구분하거나(
CASE_SENSITIVE
) 대/소문자를 구분하지 않습니다(CASE_INSENSITIVE
).COPY 작업은 대상 테이블에 있는 하나 이상의 열이 데이터 파일에 표시된 열과 일치하는지 확인합니다. 일치하는 항목을 찾은 경우 데이터 파일의 값이 열에 로딩됩니다. 일치하는 항목이 없으면 파일의 각 레코드에 대한 NULL 값 세트가 테이블에 로딩됩니다.
참고
데이터 파일에 일치하지 않는 열이 추가로 있는 경우 이러한 열의 값은 로딩되지 않습니다.
대상 테이블에 일치하지 않는 열이 추가로 있는 경우 COPY 작업은 이러한 열에 NULL 값을 삽입합니다. 이러한 열은 NULL 값을 지원해야 합니다.
COPY 문은 로딩 중에 데이터를 추가로 변환하는(즉, COPY 변환) 쿼리의 지정을 허용하지 않습니다.
NONE
COPY 작업에서는 반정형 데이터를 베리언트 열에 로딩하거나, COPY 문에 쿼리가 포함된 경우에는 데이터를 변환합니다.
참고
현재는 다음 제한 사항이 적용됩니다.
COPY 문에 MATCH_BY_COLUMN_NAME을
VALIDATION_MODE
매개 변수와 함께 사용하여 스테이징 상태 데이터를 대상 테이블에 로딩하는 대신 유효성 검사를 할 수 없습니다.Parquet 데이터만 해당. MATCH_BY_COLUMN_NAME이
CASE_SENSITIVE
또는CASE_INSENSITIVE
로 설정되어 있을 때는 열 값이 비어 있는 경우(예:"col1": ""
) 오류가 발생합니다.
- 기본값:
NONE
ENFORCE_LENGTH = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
(다른 시스템과의 호환성을 위해) 반대 논리를 가진
TRUNCATECOLUMNS
의 대체 구문대상 열 길이를 초과하는 텍스트 문자열을 자를지 여부를 지정하는 부울입니다.
TRUE
인 경우 COPY 문 실행 시 로딩된 문자열이 대상 열 길이를 초과하면 오류가 발생합니다.FALSE
인 경우에는 문자열이 대상 열 길이에 맞춰 자동으로 잘립니다.
이 복사 옵션은 관계형 테이블에 있는 별개의 열에 로딩 시 반정형 데이터의 문자열 값뿐 아니라 CSV 데이터도 지원합니다.
참고
대상 문자열 열의 길이가 최대값(예:
VARCHAR (16777216)
)으로 설정된 경우 수신 문자열은 이 길이를 초과할 수 없으며, 그렇지 않으면 COPY 명령에서 오류가 발생합니다.이 매개 변수는 기능적으로는
TRUNCATECOLUMNS
와 같지만, 동작은 반대로 이루어집니다. 이 매개 변수는 다른 데이터베이스와의 호환성을 위해 제공됩니다. 원하는 출력을 생성하려면 COPY 문에 이 두 매개 변수 중 하나만 포함해야 합니다.
- 기본값:
TRUE
TRUNCATECOLUMNS = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
(다른 시스템과의 호환성을 위해) 반대 논리를 가진
ENFORCE_LENGTH
의 대체 구문대상 열 길이를 초과하는 텍스트 문자열을 자를지 여부를 지정하는 부울입니다.
TRUE
인 경우에는 문자열이 대상 열 길이에 맞춰 자동으로 잘립니다.FALSE
인 경우 COPY 문 실행 시 로딩된 문자열이 대상 열 길이를 초과하면 오류가 발생합니다.
이 복사 옵션은 관계형 테이블에 있는 별개의 열에 로딩 시 반정형 데이터의 문자열 값뿐 아니라 CSV 데이터도 지원합니다.
참고
대상 문자열 열의 길이가 최대값(예:
VARCHAR (16777216)
)으로 설정된 경우 수신 문자열은 이 길이를 초과할 수 없으며, 그렇지 않으면 COPY 명령에서 오류가 발생합니다.이 매개 변수는 기능적으로는
ENFORCE_LENGTH
와 같지만, 동작은 반대로 이루어집니다. 이 매개 변수는 다른 데이터베이스와의 호환성을 위해 제공됩니다. 원하는 출력을 생성하려면 COPY 문에 이 두 매개 변수 중 하나만 포함해야 합니다.
- 기본값:
FALSE
FORCE = TRUE | FALSE
- 용도:
데이터 로딩 전용
- 정의:
이전에 로딩되었고 그 이후로 변경되지 않았는지 여부와는 관계없이 모든 파일을 로딩하도록 지정하는 부울입니다. 이 옵션은 파일을 다시 로딩하여 테이블의 데이터를 복제할 수 있습니다.
- 기본값:
FALSE
사용법 노트¶
테이블에 대한 변경 사항은 해당 테이블에 생성된 뷰에 자동으로 전파되지 않습니다. 예를 들어, 테이블의 열을 삭제하고 해당 열을 포함하도록 뷰가 정의된 경우 뷰가 유효하지 않게 되고 열을 제거하도록 뷰가 조정되지 않습니다.
열을 삭제한다고 해서 열의 저장 공간이 바로 확보되는 것은 아닙니다.
각 마이크로 파티션의 공간은 해당 마이크로 파티션이 다시 작성되어야 회수됩니다. 해당 마이크로 파티션에서 한 개 이상의 행에 대한 쓰기 작업(삽입, 업데이트, 삭제 등)을 통해 마이크로 파티션이 다시 작성됩니다. 공간을 강제로 확보하려면 다음 단계를 따르면 됩니다.
유지하려는 이전 테이블의 열만 포함하는 새 테이블을 만들려면 CREATE TABLE AS SELECT(CTAS) 문을 사용하십시오.
이전 테이블에 대해 DATA_RETENTION_TIME_IN_DAYS 매개 변수를
0
으로 설정합니다(선택 사항).이전 테이블을 삭제합니다.
Time Travel 기능으로 테이블을 보호하는 경우 Time Travel 보존 기간이 만료될 때까지 Time Travel 저장소에서 사용하는 공간이 회수되지 않습니다.
기본값이 있는 새 열이 기존 행이 있는 테이블에 추가되면 기존 행이 전부 기본값으로 채워집니다.
함수가 포함된 기본값을 가진 새 열을 추가하는 기능은 현재 지원되지 않습니다. 다음 오류가 반환됩니다.
Invalid column default expression (expr)
테이블을 변경하려면 테이블에 대한 소유권 권한을 가진 역할을 사용해야 합니다.
테이블에 클러스터링을 추가하려면 테이블을 포함한 스키마와 데이터베이스에 대한 USAGE 또는 OWNERSHIP 권한도 있어야 합니다.
마스킹 정책의 경우:
USING
절과FORCE
키워드는 모두 선택 사항으로, 둘 중 어떤 것도 열에 대한 마스킹 정책을 설정할 필요가 없습니다.USING
절과FORCE
키워드는 따로 사용하거나 함께 사용할 수 있습니다. 자세한 내용은 다음을 참조하십시오.조건부 열을 사용하는 단일 마스킹 정책은 테이블의 열 구조가 정책에 지정된 열과 일치하는 경우 여러 테이블에 적용할 수 있습니다.
마스킹 정책으로 하나 이상의 테이블 열을 수정하거나 행 액세스 정책으로 테이블 자체를 수정할 때, POLICY_CONTEXT 함수를 사용하여, 마스킹 정책으로 보호되는 열과 행 액세스 정책으로 보호되는 테이블에 대한 쿼리를 시뮬레이션합니다.
행 액세스 정책의 경우:
Snowflake는 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 지원합니다.
예를 들어 테이블에 이미 설정된 행 액세스 정책을 다른 정책으로 바꾸려면 먼저 행 액세스 정책을 삭제한 다음 새 행 액세스 정책을 추가하십시오.
주어진 리소스(즉, 테이블 또는 뷰)의 경우, 행 액세스 정책을
ADD
또는DROP
하려면 스키마에 대한 APPLY ROW ACCESS POLICY 권한 또는 리소스에 대한 OWNERSHIP 권한과 행 액세스 정책 리소스에 대한 APPLY 권한이 있어야 합니다.테이블 또는 뷰는 한 번에 하나의 행 액세스 정책으로만 보호할 수 있습니다. 정책 본문이 행 액세스 정책으로 보호되는 테이블 또는 뷰 열이나 마스킹 정책으로 보호되는 열을 참조하는 경우 정책을 추가하는 데 실패합니다.
마찬가지로, 마스킹 정책 본문이 행 액세스 정책이나 다른 마스킹 정책으로 보호되는 테이블을 참조하는 경우 테이블 열에 마스킹 정책을 추가하는 데 실패합니다.
행 액세스 정책을 시스템 뷰 또는 테이블 함수에 적용할 수 없습니다.
다른 DROP <오브젝트> 작업과 마찬가지로, 행 액세스 정책이 추가되지 않은 리소스에서 행 액세스 정책을 삭제하려고 하면 Snowflake가 오류를 반환합니다.
오브젝트에 행 액세스 정책과 하나 이상의 마스킹 정책이 모두 있는 경우 행 액세스 정책이 먼저 평가됩니다.
외래 키를 생성하는 경우
REFERENCES
절의 열은 기본 키에 대해 나열된 열과 동일한 순서로 나열되어야 합니다. 예:create table parent ... constraint primary_key_1 primary key (c_1, c_2) ... create table child ... constraint foreign_key_1 foreign key (...) REFERENCES parent (c_1, c_2) ...
두 경우 모두 열의 순서는
c_1, c_2
입니다. 외래 키의 열 순서가 달랐다면(예:c_2, c_1
) 외래 키 생성 시도가 실패했을 것입니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
ALTER TABLE … CHANGE_TRACKING = TRUE
변경 내용 추적을 사용하도록 테이블을 변경하면 작업 기간 동안 테이블이 잠깁니다. 잠금으로 인해 연결된 몇몇 DDL/DML 작업에서 지연이 발생할 수 있습니다. 자세한 내용은 리소스 잠금 섹션을 참조하십시오.
하이브리드 테이블의 인덱스:
ALTER TABLE 명령을 사용하여 하이브리드 테이블에 고유 키 또는 외래 키 제약 조건을 추가하거나 삭제하면 해당 인덱스도 생성되거나 삭제됩니다. 하이브리드 테이블의 인덱스에 대한 자세한 내용은 CREATE INDEX 섹션을 참조하십시오.
외래 키 제약 조건은 동일한 데이터베이스에 저장된 하이브리드 테이블에서만 지원됩니다. 한 데이터베이스에서 다른 데이터베이스로 하이브리드 테이블을 이동하는 기능은 지원되지 않습니다. 하이브리드 테이블에 정의된 기본 키, 고유 키 및 외래 키 제약 조건에는
TRUE
로 표시된 RELY 필드가 있습니다.해당 인덱스가 삭제되기 전에는 인덱스에서 사용하는 열을 삭제할 수 없습니다.
예¶
다음 섹션에서는 ALTER COLUMN 명령을 사용하는 예를 제시합니다.
테이블 이름 바꾸기¶
다음을 통해 t1
이라는 테이블을 생성합니다.
CREATE OR REPLACE TABLE t1(a1 number);
SHOW TABLES LIKE 't1';
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | T1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | OFF | N | N | ROLE | N | NULL |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
다음 문은 테이블 이름을 tt1
로 변경합니다.
ALTER TABLE t1 RENAME TO tt1;
SHOW TABLES LIKE 'tt1';
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
| created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time | change_tracking | is_external | enable_schema_evolution | owner_role_type | is_event | budget |
|-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------|
| 2023-10-19 10:37:04.858 -0700 | TT1 | TESTDB | MY_SCHEMA | TABLE | | | 0 | 0 | PUBLIC | 1 | OFF | N | N | ROLE | N | NULL |
+-------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------+----------------+-----------------+-------------+-------------------------+-----------------+----------+--------+
테이블 바꾸기¶
다음 문은 t1
및 t2
라는 테이블을 생성합니다.
CREATE OR REPLACE TABLE t1(a1 NUMBER, a2 VARCHAR, a3 DATE);
CREATE OR REPLACE TABLE t2(b1 VARCHAR);
DESC TABLE t1;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | DATE | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
다음 문은 테이블 t1
을 테이블 t2
로 바꿉니다.
ALTER TABLE t1 SWAP WITH t2;
DESC TABLE t1;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
DESC TABLE t2;
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | VARCHAR(16777216) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | DATE | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
열 추가하기¶
다음을 통해 t1
이라는 테이블을 생성합니다.
CREATE OR REPLACE TABLE t1(a1 NUMBER);
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
다음 문은 이 테이블에 a2
라는 열을 추가합니다.
ALTER TABLE t1 ADD COLUMN a2 NUMBER;
다음 문은 NOT NULL 제약 조건이 있는 a3
이라는 열을 추가합니다.
ALTER TABLE t1 ADD COLUMN a3 NUMBER NOT NULL;
다음 문은 기본값과 NOT NULL 제약 조건이 있는 a4
이라는 열을 추가합니다.
ALTER TABLE t1 ADD COLUMN a4 NUMBER DEFAULT 0 NOT NULL;
다음 문은 언어별 데이터 정렬 사양 이 있는 a5
라는 VARCHAR 열을 추가합니다.
ALTER TABLE t1 ADD COLUMN a5 VARCHAR COLLATE 'en_US';
DESC TABLE t1;
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
| A5 | VARCHAR(16777216) COLLATE 'en_us' | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
다음 문은 열이 존재하지 않는 경우에만 IF NOT EXISTS 절을 사용하여 a2
라는 열을 추가합니다. a2
라는 기존 열이 있습니다. IF NOT EXISTS 절을 지정하면 이 문이 오류로 인해 실패하는 것을 방지할 수 있습니다.
ALTER TABLE t1 ADD COLUMN IF NOT EXISTS a2 NUMBER;
DESCRIBE TABLE 명령의 출력에 표시된 것처럼, 위 문은 a2
라는 기존 열에 영향을 주지 않습니다.
DESC TABLE t1;
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| A1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
| A5 | VARCHAR(16777216) COLLATE 'en_us' | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
+------+-----------------------------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
열 이름 바꾸기¶
다음 문은 열 a1
의 이름을 b1
로 변경합니다.
ALTER TABLE t1 RENAME COLUMN a1 TO b1;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A2 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
열 삭제¶
다음 문은 a2
열을 삭제합니다.
ALTER TABLE t1 DROP COLUMN a2;
DESC TABLE t1;
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
다음 문은 열이 존재하는 경우에만 IF EXISTS 절을 사용하여 a2
라는 열을 삭제합니다. a2
라는 기존 열이 없습니다. IF EXISTS 절을 지정하면 이 문이 오류로 인해 실패하는 것을 방지할 수 있습니다.
ALTER TABLE t1 DROP COLUMN IF EXISTS a2;
DESCRIBE TABLE 명령의 출력에 표시된 것처럼, 위 문은 기존 테이블에 영향을 주지 않습니다.
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment | policy name |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------|
| B1 | NUMBER(38,0) | COLUMN | Y | NULL | N | N | NULL | NULL | NULL | NULL |
| A3 | NUMBER(38,0) | COLUMN | N | NULL | N | N | NULL | NULL | NULL | NULL |
| A4 | NUMBER(38,0) | COLUMN | N | 0 | N | N | NULL | NULL | NULL | NULL |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+-------------+
외부 테이블에 열 추가하기, 이름 바꾸기 및 삭제하기¶
다음 문은 exttable1
이라는 외부 테이블을 생성합니다.
CREATE EXTERNAL TABLE exttable1
LOCATION=@mystage/logs/
AUTO_REFRESH = true
FILE_FORMAT = (TYPE = PARQUET)
;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
다음 문은 외부 테이블에 a1
이라는 새 열을 추가합니다.
ALTER TABLE exttable1 ADD COLUMN a1 VARCHAR AS (value:a1::VARCHAR);
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
| A1 | VARCHAR(16777216) | VIRTUAL | Y | NULL | N | N | NULL | TO_CHAR(GET(VALUE, 'a1')) | NULL |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
다음 문은 a1
열의 이름을 b1
로 변경합니다.
ALTER TABLE exttable1 RENAME COLUMN a1 TO b1;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
| B1 | VARCHAR(16777216) | VIRTUAL | Y | NULL | N | N | NULL | TO_CHAR(GET(VALUE, 'a1')) | NULL |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
다음 문은 b1
이라는 열을 삭제합니다.
ALTER TABLE exttable1 DROP COLUMN b1;
DESC EXTERNAL TABLE exttable1;
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
| name | type | kind | null? | default | primary key | unique key | check | expression | comment |
|-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------|
| VALUE | VARIANT | COLUMN | Y | NULL | N | N | NULL | NULL | The value of this row |
+-----------+-------------------+-----------+-------+---------+-------------+------------+-------+----------------------------------------------------------+-----------------------+
클러스터링 키 순서 변경하기¶
다음 문은 id
및 date
열로 클러스터링되는 t1
이라는 테이블을 생성합니다.
CREATE OR REPLACE TABLE T1 (id NUMBER, date TIMESTAMP_NTZ, name STRING) CLUSTER BY (id, date);
SHOW TABLES LIKE 'T1';
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (ID,DATE) | 0 | 0 | ACCOUNTADMIN | 1 |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
다음 문은 클러스터링 키의 순서를 변경합니다.
ALTER TABLE t1 CLUSTER BY (date, id);
SHOW TABLES LIKE 'T1';
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
created_on | name | database_name | schema_name | kind | comment | cluster_by | rows | bytes | owner | retention_time |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
Tue, 21 Jun 2016 15:42:12 -0700 | T1 | TESTDB | TESTSCHEMA | TABLE | | (DATE,ID) | 0 | 0 | ACCOUNTADMIN | 1 |
---------------------------------+------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
행 액세스 정책 추가 및 삭제하기¶
다음은 단일 열을 지정하는 동안 테이블에 행 액세스 정책을 추가하는 예입니다. 정책을 설정한 후, 정보 스키마 를 검사하여 확인할 수 있습니다.
alter table t1 add row access policy rap_t1 on (empl_id);
다음은 단일 테이블에 두 개의 열을 지정하는 동안 행 액세스 정책을 추가하는 예입니다.
alter table t1 add row access policy rap_test2 on (cost, item);
다음은 테이블에서 행 액세스 정책을 삭제하는 예입니다. 정보 스키마 를 쿼리하여 정책이 삭제되었음을 확인합니다.
alter table t1 drop row access policy rap_v1;
다음은 테이블에 대한 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 결합하는 방법을 보여주는 예입니다. 정보 스키마 를 검사하여 결과를 확인합니다.
alter table t1 drop row access policy rap_t1_version_1, add row access policy rap_t1_version_2 on (empl_id);