카테고리:

테이블, 뷰 및 시퀀스 DDL

CREATE TABLE

현재/지정된 스키마에 새 테이블을 만들거나 기존 테이블을 대체합니다. 이름, 데이터 타입 그리고 선택적으로 열이 다음과 같은지 여부로 구성된 각각의 열 정의를 사용하여 테이블에 여러 개의 열이 있을 수 있습니다.

  • 값(NOT NULL)이 필요한지 여부.

  • 기본값이 있는지 여부.

  • 참조 무결성 제약 조건(기본 키, 외래 키 등)이 있는지 여부.

또한, 이 명령은 다음 베리언트를 지원합니다.

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

  • CREATE TABLE … USING TEMPLATE(스테이징된 파일 세트에서 파생된 열 정의를 사용하여 테이블을 생성함)

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

  • CREATE TABLE … CLONE(기존 테이블의 복제본을 생성함)

참고 항목:

ALTER TABLE , DROP TABLE , SHOW TABLES , DESCRIBE TABLE

이 항목의 내용:

구문

CREATE [ OR REPLACE ]
    [ { [ LOCAL | GLOBAL ] TEMP[ORARY] | VOLATILE } | TRANSIENT ]
    TABLE [ IF NOT EXISTS ] <table_name>
    ( <col_name> <col_type>
                             [ COLLATE '<collation_specification>' ]
                                /* COLLATE is supported only for text data types (VARCHAR and synonyms) */
                             [ COMMENT '<string_literal>' ]
                             [ { DEFAULT <expr>
                               | { AUTOINCREMENT | IDENTITY } [ { ( <start_num> , <step_num> ) | START <num> INCREMENT <num> } ] } ]
                                /* AUTOINCREMENT (or IDENTITY) is supported only for numeric data types (NUMBER, INT, FLOAT, etc.) */
                             [ NOT NULL ]
                             [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col_name> , <cond_col1> , ... ) ] ]
                             [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
                             [ inlineConstraint ]
      [ , <col_name> <col_type> [ ... ] ]
      [ , outoflineConstraint ]
      [ , ... ] )
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ 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>' ]
  [ COPY GRANTS ]
  [ [ WITH ] ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , <col_name> ... ] ) ]
  [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ]
  [ COMMENT = '<string_literal>' ]

여기서:

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 를 참조하십시오.

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>'
     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
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = ORC
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If TYPE = PARQUET
     COMPRESSION = AUTO | LZO | SNAPPY | NONE
     SNAPPY_COMPRESSION = TRUE | FALSE
     BINARY_AS_TEXT = TRUE | FALSE
     TRIM_SPACE = 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
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
copyOptions ::=
     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

베리언트 구문

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

쿼리에서 반환된 데이터로 채워진 새 테이블을 만듭니다.

CREATE [ OR REPLACE ] TABLE <table_name> [ ( <col_name> [ <col_type> ] , <col_name> [ <col_type> ] , ... ) ]
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ COPY GRANTS ]
  AS SELECT <query>
  [ ... ]

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

CREATE 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 TABLE … USING TEMPLATE

반정형 데이터를 포함하는 스테이징된 파일 세트에서 파생된 열 정의를 사용하여 새 테이블을 만듭니다. 이 기능은 현재 Apache Parquet, Apache Avro 및 ORC 파일로 제한됩니다.

CREATE [ OR REPLACE ] TABLE <table_name>
  [ COPY GRANTS ]
  USING TEMPLATE <query>
  [ ... ]

참고

이 문이 같은 이름의 기존 테이블을 대체하는 경우에는 대체되는 테이블에서 권한 부여가 복사됩니다. 그 이름의 기존 테이블이 없으면 복제되는 원본 테이블에서 권한 부여가 복사됩니다.

COPY GRANTS에 대한 자세한 내용은 이 문서에 있는 COPY GRANTS 섹션을 참조하십시오.

CREATE TABLE … LIKE

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

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

COPY GRANTS에 대한 자세한 내용은 이 문서에 있는 COPY GRANTS 섹션을 참조하십시오.

참고

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

CREATE TABLE … CLONE

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

CREATE [ OR REPLACE ] TABLE <name> CLONE <source_table>
  [ { AT | BEFORE } ( { TIMESTAMP => <timestamp> | OFFSET => <time_difference> | STATEMENT => <id> } ) ]
  [ COPY GRANTS ]
  [ ... ]

참고

이 문이 같은 이름의 기존 테이블을 대체하는 경우에는 대체되는 테이블에서 권한 부여가 복사됩니다. 그 이름의 기존 테이블이 없으면 복제되는 원본 테이블에서 권한 부여가 복사됩니다.

COPY GRANTS에 대한 자세한 내용은 이 문서에 있는 COPY GRANTS 섹션을 참조하십시오.

복제에 대한 세부 정보는 CREATE <오브젝트> … CLONE 을 참조하십시오.

필수 매개 변수

name

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

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

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

col_name

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

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

참고

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

  • CURRENT_DATE

  • CURRENT_ROLE

  • CURRENT_TIME

  • CURRENT_TIMESTAMP

  • CURRENT_USER

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

col_type

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

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

query
USING TEMPLATE을 사용하는 경우 필요함

INFER_SCHEMA 함수를 호출하고 출력을 배열로 서식 지정하는 하위 쿼리입니다.

또는 USING TEMPLATE 은 INFER_SCHEMA 출력을 문자열 리터럴 또는 변수로 받아들입니다.

선택적 매개 변수

TEMP[ORARY] | LOCAL TEMP[ORARY] | GLOBAL TEMP[ORARY] | VOLATILE

테이블이 임시 테이블임을 지정합니다. 임시 테이블은 생성된 사용자 세션 기간에만 지속되며 다른 사용자에게는 표시되지 않습니다. 세션이 끝나면 임시 테이블과 모든 내용이 삭제됩니다.

다른 데이터베이스와의 호환성을 위해 TEMPORARY (예: GLOBAL TEMPORARY)의 동의어와 약어가 제공됩니다(예: CREATE TABLE 문을 마이그레이션할 때 오류 방지). 이러한 키워드로 만든 테이블은 TEMPORARY 를 사용하여 만든 테이블과 똑같이 나타나고 동작합니다.

기본값: 값 없음. 테이블이 TRANSIENT 또는 TEMPORARY 로 선언되지 않은 경우 테이블은 영구적입니다.

참고

임시 테이블에는 같은 스키마에서 같은 이름을 가진 다른 테이블을 사용할 때 발생할 수 있는 명명 충돌과 관련하여 몇 가지 추가적인 사용법 고려 사항이 있습니다.

또한, 임시 테이블에는 몇 가지 저장소 고려 사항이 있습니다.

임시 테이블을 만들지, 일시적 테이블을 만들지 결정할 때 이러한 고려 사항과 다른 고려 사항에 대한 자세한 내용은 임시 및 일시적 테이블 관련 작업하기Time Travel 및 Fail-safe 관련 저장소 요금 을 참조하십시오.

TRANSIENT

테이블이 일시적 테이블임을 지정합니다.

영구 테이블과 마찬가지로, 일시적 테이블은 명시적으로 삭제될 때까지 존재하며 적절한 권한이 있는 어떤 사용자라도 볼 수 있습니다. 하지만 일시적 테이블은 영구 테이블보다 데이터 보호 수준이 낮은데, 이는 곧 시스템 장애가 발생할 경우 일시적 테이블의 데이터가 손실될 수 있다는 뜻입니다. 이와 같이, 일시적 테이블은 Snowflake 외부에서 다시 만들 수 있는 데이터에만 사용해야 합니다.

기본값: 값 없음. 테이블이 TRANSIENT 또는 TEMPORARY 로 선언되지 않은 경우 테이블은 영구적입니다.

참고

일시적 테이블에는 몇 가지 저장소 고려 사항이 있습니다.

임시 테이블을 만들지, 일시적 테이블을 만들지 결정할 때 이러한 고려 사항과 다른 고려 사항에 대한 자세한 내용은 임시 및 일시적 테이블 관련 작업하기Time Travel 및 Fail-safe 관련 저장소 요금 을 참조하십시오.

COLLATE 'collation_specification'

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

COMMENT 'string_literal'

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

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

DEFAULT ... 또는 . AUTOINCREMENT ...

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

DEFAULT expr

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

  • 상수 값.

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

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

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

    참고

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

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

    • 하위 쿼리.

    • 집계.

    • 윈도우 함수.

    • 보안 UDF.

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

    • 외부 함수.

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

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

조심

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

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

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

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

참고

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

MASKING POLICY = policy_name

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

USING ( col_name , cond_col_1 ... )

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

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

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

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

CONSTRAINT ...

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

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

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

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

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

중요

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

테이블에 대한 클러스터링 키를 지정하기 전에 Snowflake 테이블 구조 이해하기 를 읽어보십시오.

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 [ ... ]

테이블로 로딩/언로딩할 파일의 형식을 지정합니다.

파일 형식 유형을 지정하면 형식별 옵션을 추가로 지정할 수 있습니다. 자세한 내용은 이 항목에 있는 형식 유형 옵션 섹션을 참조하십시오.

기본값: TYPE = CSV

참고

FORMAT_NAMETYPE 은 상호 배타적인데, 의도하지 않은 동작을 방지하려면 테이블을 만들 때 둘 중 하나만 지정해야 합니다.

STAGE_COPY_OPTIONS = ( ... )

테이블에 데이터를 로딩할 때 사용할 하나 이상의 옵션을 지정합니다. 자세한 내용은 이 항목에 있는 복사 옵션 섹션을 참조하십시오.

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

참고:

  • CREATE TABLE 문이 둘 이상의 테이블(예: create or replace table TABLE1 clone TABLE2;)을 참조하는 경우 COPY GRANTS 절은 대체되는 테이블 에서 권한 부여를 복사합니다(예: 이 예에서는 TABLE1).

  • 데이터 공유 사용 시:

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

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

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

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

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

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

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

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

태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다. 오브젝트에 설정할 수 있는 고유한 태그의 최대 수는 20개입니다. 자세한 내용은 오브젝트/열에 대한 태그 할당량 섹션을 참조하십시오.

단일 CREATE 문으로 오브젝트에서 최대 5개의 태그를 설정할 수 있습니다.

COMMENT = 'string_literal'

테이블에 대한 설명을 지정합니다.

기본값: 값 없음

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

형식 유형 옵션(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진수(\\5e) 또는 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진수(\\5e) 또는 16진수(0x5e) 값을 지정합니다.

멀티바이트 문자

16진수 값(\x 접두사가 붙음). 예를 들어, 센트(¢) 문자로 구분된 레코드의 경우 16진수(\xC2\xA2) 값을 지정합니다.

RECORD_DELIMITER 또는 FIELD_DELIMITER의 구분 기호는 다른 파일 형식 옵션(예: FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb')에 대한 구분 기호의 하위 문자열일 수 없습니다.

지정된 구분 기호는 임의의 바이트 시퀀스가 아니라 유효한 UTF-8 문자여야 합니다. 또한, 구분 기호는 최대 20자로 제한됩니다.

NONE 의 값도 허용합니다.

기본값

쉼표(,)

FILE_EXTENSION = 'string' | NONE
용도

데이터 언로딩 전용

정의

스테이지로 언로딩된 파일의 확장명을 지정합니다. 모든 확장명을 허용합니다. 원하는 소프트웨어나 서비스에서 읽을 수 있는 파일 확장명은 사용자가 지정해야 합니다.

기본값

null, 즉 파일 확장명이 형식 유형 .csv[compression] 으로 결정된다는 의미로, 여기서 compressionCOMPRESSION 이 설정된 경우 압축 방법에 따라 추가되는 확장명입니다.

참고

SINGLE 복사 옵션이 TRUE 인 경우 COPY 명령을 실행하면 기본적으로 파일 확장명이 없는 파일이 언로딩됩니다. 파일 확장명을 지정하려면 internal_location 또는 external_location 경로(예: copy into @stage/data.csv)에 파일 이름과 확장명을 입력하십시오.

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

히브리어

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-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] 으로 결정된다는 의미로, 여기서 compressionCOMPRESSION 이 설정된 경우 압축 방법에 따라 추가되는 확장명입니다.

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 인코딩 오류가 오류 조건을 생성하는지 여부를 지정하는 부울입니다. TRUE 로 설정하면 잘못된 UTF-8 시퀀스가 전부 유니코드 문자 U+FFFD (즉, 《대체 문자》)로 자동으로 바뀝니다.

참고

이 복사 옵션을 선택하면 데이터 로딩 중에 UTF-8 문자 이외의 모든 문자가 제거되지만, 일대일 문자 대체를 보장하지는 않습니다. REPLACE_INVALID_CHARACTERS 복사 옵션을 대신 사용하는 것이 좋습니다.

기본값

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

TRIM_SPACE = TRUE | FALSE
용도

데이터 로딩 전용

정의

문자열에서 선행 공백과 후행 공백을 제거할지 여부를 지정하는 부울입니다.

예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을 TRUE 로 설정하십시오.

이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Avro 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.

기본값

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

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

TRIM_SPACE = TRUE | FALSE
용도

데이터 로딩 전용

정의

문자열에서 선행 공백과 후행 공백을 제거할지 여부를 지정하는 부울입니다.

예를 들어, 외부 데이터베이스 소프트웨어에서 필드를 따옴표로 묶지만 선행 공백을 삽입하는 경우 Snowflake는 여는 따옴표 문자가 아닌 선행 공백을 필드의 시작으로 읽습니다(즉, 따옴표는 필드 데이터 문자열의 일부로 해석됨). 데이터 로딩 중에 불필요한 공백을 제거하려면 이 옵션을 TRUE 로 설정하십시오.

이 파일 형식 옵션은 MATCH_BY_COLUMN_NAME 복사 옵션을 사용하여 Parquet 데이터를 별도의 열에 로딩할 때만 다음 작업에 적용됩니다.

기본값

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 인코딩 오류가 오류 조건을 생성하는지 여부를 지정하는 부울입니다. TRUE 로 설정하면 잘못된 UTF-8 시퀀스가 전부 유니코드 문자 U+FFFD (즉, 《대체 문자》)로 자동으로 바뀝니다.

기본값

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

SKIP_BYTE_ORDER_MARK = TRUE | FALSE
용도

데이터 로딩 전용

정의

입력 파일에 있는 모든 BOM(바이트 순서 표시)을 건너뛸지 여부를 지정하는 부울입니다. BOM은 데이터 파일의 시작 부분에서 바이트 순서와 인코딩 형식을 정의하는 문자 코드입니다.

FALSE 로 설정하면 Snowflake가 데이터 파일에 있는 모든 BOM을 인식하므로, BOM에서 오류가 발생하거나 테이블의 첫 번째 열에 병합되는 결과가 될 수 있습니다.

기본값

TRUE

복사 옵션(copyOptions)

복사 옵션은 테이블에 데이터 로딩테이블에서 데이터 언로딩 에 사용됩니다.

다음 복사 옵션(공백, 쉼표 또는 줄 바꿈으로 구분) 중 하나 이상을 지정할 수 있습니다.

STAGE_COPY_OPTIONS = ( ... )

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_FILECONTINUE 또는 ABORT_STATEMENT 보다 느립니다. 적은 수의 오류로 인해 큰 파일을 건너뛰면 지연이 발생하고 크레딧이 낭비될 수 있습니다. 논리적 설명이 없는 파일에서 많은 수의 레코드를 로딩할 때(예: 파일이 대략적인 간격으로 자동 생성됨) 대신 CONTINUE 를 지정하는 것이 좋습니다.

추가 패턴:

SKIP_FILE_num (예: SKIP_FILE_10)

파일에서 발견된 오류 행 수가 지정된 수와 같거나 초과하면 파일을 건너뜁니다.

'SKIP_FILE_num%' (예: 'SKIP_FILE_10%')

파일에서 발견된 오류 행의 백분율이 지정된 백분율을 초과하면 파일을 건너뜁니다.

ABORT_STATEMENT

데이터 파일에서 오류가 발견되면 로딩 작업을 중단합니다.

FILES 매개 변수에 명시적으로 지정된 데이터 파일을 찾을 수 없는 경우를 제외하고, (예컨대 존재하지 않거나 액세스할 수 없어) 데이터 파일을 찾을 수 없는 경우에는 로딩 작업이 중단되지 않습니다.

  • 이 복사 옵션에는 다음 동작이 적용됩니다.

    • 구문 분석 또는 변환 오류가 있는 구조화된 데이터 파일(CSV, TSV 등)을 로딩할 때 모든 ON_ERROR 값이 예상대로 작동합니다.

      하지만 반정형 데이터 파일(JSON, Avro, ORC, Parquet 또는 XML)은 그와 같은 형식 유형의 구조로 인해 CONTINUE, SKIP_FILE_num 또는 'SKIP_FILE_num%' 과 같은 ON_ERROR 값에 대해 구조화된 데이터 파일과 똑같은 동작 의미 체계를 지원하지 않습니다.

    • Parquet 및 ORC 데이터만 해당. ON_ERROR를 CONTINUE, SKIP_FILE_num 또는 'SKIP_FILE_num%' 으로 설정하면 구문 분석 오류가 발생할 경우 데이터 파일을 건너뛰게 됩니다. 모든 변환 또는 변형 오류는 선택한 옵션 값과 관계없이 ABORT_STATEMENT (COPY INTO <table> 문) 또는 SKIP_FILE (Snowpipe)의 기본 동작을 따릅니다.

    • JSON, XML 및 Avro 데이터만 해당. ON_ERROR를 CONTINUE, SKIP_FILE_num 또는 'SKIP_FILE_num%' 으로 설정하면 구문 분석 오류가 있는 레코드까지의 모든 레코드가 로딩되지만, 데이터 파일의 나머지 레코드는 건너뜁니다. 모든 변환 또는 변형 오류는 선택한 옵션 값과 관계없이 COPY(ABORT_STATEMENT) 또는 Snowpipe(SKIP_FILE)의 기본 동작을 따릅니다.

기본값
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

액세스 제어 요구 사항

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

권한

오브젝트

참고

CREATE TABLE

스키마

임시 테이블을 만들 때는 CREATE TABLE 권한이 필요하지 않습니다.

SELECT

테이블, 외부 테이블, 뷰

테이블을 복제하거나 CTAS 문을 실행할 때만 쿼리된 테이블 및/또는 뷰에 필요합니다.

APPLY

마스킹 정책, 행 액세스 정책, 태그

테이블 생성 시 마스킹 정책, 행 액세스 정책, 오브젝트 태그 또는 이러한 거버넌스 기능의 조합을 적용할 때만 필요합니다.

USAGE

파일 형식

STAGE_FILE_FORMAT 매개 변수에 명명된 파일 형식을 지정할 때만 필요합니다.

USAGE(외부 스테이지) 또는 READ(내부 스테이지)

스테이지

CREATE TABLE … USING TEMPLATE 문을 사용하여 스테이징된 파일에서 테이블 열 정의를 파생하는 데 필요합니다.

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

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

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

사용법 노트

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

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

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

    중요

    OR REPLACE 를 사용하는 것은 기존 테이블에서 DROP TABLE 를 사용한 다음 같은 이름을 가진 새 테이블을 만드는 것과 같습니다. 하지만 삭제된 테이블이 시스템에서 영구적으로 제거되는 것은 아닙니다. 대신, 삭제된 데이터베이스는 Time Travel에 보존됩니다. Time Travel에서 삭제된 테이블은 복구할 수 있지만 계정의 데이터 저장소에도 기여하므로 이 점을 유념해야 합니다. 자세한 내용은 Time Travel 및 Fail-safe 관련 저장소 요금 섹션을 참조하십시오.

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

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

    테이블을 다시 만들거나 바꾸면 변경 데이터가 삭제됩니다. 테이블의 모든 스트림은 부실 상태가 됩니다. 또한 이 테이블을 기본 테이블로 포함하는 뷰의 모든 스트림은 부실 상태가 됩니다. 부실 스트림은 읽을 수 없습니다.

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

  • CREATE TABLE … CLONE:

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

  • CREATE TABLE … LIKE:

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

  • CREATE TABLE … AS SELECT(CTAS):

    • SELECT 목록에 있는 열 이름의 별칭이 유효한 열이면 CTAS 문에 열 정의가 필요하지 않습니다. 열 이름과 유형이 생략된 경우 이들은 기본 쿼리에서 유추됩니다.

      CREATE TABLE <table_name> AS SELECT ...
      

      또는 다음 구문을 사용하여 이름을 명시적으로 지정할 수 있습니다.

      CREATE TABLE <table_name> ( <col1_name> , <col2_name> , ... ) AS SELECT ...
      

      지정된 열 이름의 개수는 쿼리의 SELECT 목록 항목 개수와 일치해야 하며, 열의 유형은 쿼리로 생성된 유형에서 유추됩니다.

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

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

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

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

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

  • 트랜잭션 내에서 모든 DDL 문(CREATE TEMPORARY/TRANSIENT TABLE 포함)은 트랜잭션을 커밋한 후에 DDL 문 자체를 실행합니다. 그러면 DDL 문이 자체 트랜잭션에서 실행됩니다. DDL 문 뒤의 다음 문이 새 트랜잭션을 시작합니다. 따라서 단일 트랜잭션 내에서 임시 테이블이나 일시적 테이블을 만들고 사용하고 삭제할 수 없습니다. 트랜잭션 내에서 임시 테이블이나 일시적 테이블을 사용하려면 트랜잭션 전에 테이블을 만들고 트랜잭션 후에 테이블을 삭제하십시오.

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

  • 조건부 열을 사용하는 단일 마스킹 정책은 테이블의 열 구조가 정책에 지정된 열과 일치하는 경우 여러 테이블에 적용할 수 있습니다.

  • 하나 이상의 테이블 열에 마스킹 정책을 사용하여 테이블을 생성하거나, 테이블에 추가된 행 액세스 정책을 생성할 때, POLICY_CONTEXT 함수를 사용하여, 마스킹 정책에 의해 보호되는 열 및 행 액세스 정책에 의해 보호되는 테이블에 대한 쿼리를 시뮬레이션합니다.

  • 메타데이터 관련:

    주의

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

현재 데이터베이스에 간단한 테이블을 만들고 테이블에 행 삽입하기:

CREATE TABLE mytable (amount NUMBER);

+-------------------------------------+
| status                              |
|-------------------------------------|
| Table MYTABLE successfully created. |
+-------------------------------------+

INSERT INTO mytable VALUES(1);

SHOW TABLES like 'mytable';

+---------------------------------+---------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+
| created_on                      | name    | database_name | schema_name | kind  | comment | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+---------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------|
| Mon, 11 Sep 2017 16:32:28 -0700 | MYTABLE | TESTDB        | PUBLIC      | TABLE |         |            |    1 |  1024 | ACCOUNTADMIN | 1              |
+---------------------------------+---------+---------------+-------------+-------+---------+------------+------+-------+--------------+----------------+

DESC TABLE mytable;

+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name   | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| AMOUNT | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

간단한 테이블을 만들고 테이블과 테이블의 열 모두에 대한 설명 지정하기:

CREATE TABLE example (col1 number comment 'a column comment') COMMENT='a table comment';

+-------------------------------------+
| status                              |
|-------------------------------------|
| Table EXAMPLE successfully created. |
+-------------------------------------+

SHOW TABLES like 'example';

+---------------------------------+---------+---------------+-------------+-------+-----------------+------------+------+-------+--------------+----------------+
| created_on                      | name    | database_name | schema_name | kind  | comment         | cluster_by | rows | bytes | owner        | retention_time |
|---------------------------------+---------+---------------+-------------+-------+-----------------+------------+------+-------+--------------+----------------|
| Mon, 11 Sep 2017 16:35:59 -0700 | EXAMPLE | TESTDB        | PUBLIC      | TABLE | a table comment |            |    0 |     0 | ACCOUNTADMIN | 1              |
+---------------------------------+---------+---------------+-------------+-------+-----------------+------------+------+-------+--------------+----------------+

DESC TABLE example;

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+------------------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment          |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+------------------|
| COL1 | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | a column comment |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+------------------+

기존 테이블에서 선택하여 테이블 만들기:

CREATE TABLE mytable_copy (b) AS SELECT * from mytable;

DESC TABLE mytable_copy;

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| B    | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

CREATE TABLE mytable_copy2 AS SELECT b+1 AS c FROM mytable_copy;

DESC TABLE mytable_copy2;

+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| C    | NUMBER(39,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

SELECT * FROM mytable_copy2;

+---+
| C |
|---|
| 2 |
+---+

기존 테이블에서 선택하여 테이블을 만드는 더 높은 수준의 예로, 이 예에서는 새 테이블의 summary_amount 열에 있는 값이 원본 테이블의 두 열에서 파생됩니다.

CREATE TABLE testtable_summary (name, summary_amount) AS SELECT name, amount1 + amount2 FROM testtable;

스테이지 상태 Parquet 데이터 파일에서 열을 선택하여 테이블 만들기:

CREATE OR REPLACE TABLE parquet_col (
  custKey number default NULL,
  orderDate date default NULL,
  orderStatus varchar(100) default NULL,
  price varchar(255)
)
AS SELECT
  $1:o_custkey::number,
  $1:o_orderdate::date,
  $1:o_orderstatus::text,
  $1:o_totalprice::text
FROM @my_stage;

+-----------------------------------------+
| status                                  |
|-----------------------------------------|
| Table PARQUET_COL successfully created. |
+-----------------------------------------+

DESC TABLE parquet_col;

+-------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name        | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|-------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| CUSTKEY     | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| ORDERDATE   | DATE         | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| ORDERSTATUS | VARCHAR(100) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
| PRICE       | VARCHAR(255) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+-------------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

다른 테이블과 열 정의가 같지만 행이 없는 테이블 만들기:

CREATE TABLE mytable (amount NUMBER);

INSERT INTO mytable VALUES(1);

SELECT * FROM mytable;

+--------+
| AMOUNT |
|--------|
|      1 |
+--------+

CREATE TABLE mytable_2 LIKE mytable;

DESC TABLE mytable_2;

+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+
| name   | type         | kind   | null? | default | primary key | unique key | check | expression | comment |
|--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------|
| AMOUNT | NUMBER(38,0) | COLUMN | Y     | NULL    | N           | N          | NULL  | NULL       | NULL    |
+--------+--------------+--------+-------+---------+-------------+------------+-------+------------+---------+

SELECT * FROM mytable_2;

+--------+
| AMOUNT |
|--------|
+--------+

다중 열 클러스터링 키로 테이블 만들기:

CREATE TABLE mytable (date timestamp_ntz, id number, content variant) CLUSTER BY (date, id);

SHOW TABLES LIKE 'mytable';

+---------------------------------+---------+---------------+-------------+-------+---------+------------------+------+-------+--------------+----------------+
| created_on                      | name    | database_name | schema_name | kind  | comment | cluster_by       | rows | bytes | owner        | retention_time |
|---------------------------------+---------+---------------+-------------+-------+---------+------------------+------+-------+--------------+----------------|
| Mon, 11 Sep 2017 16:20:41 -0700 | MYTABLE | TESTDB        | PUBLIC      | TABLE |         | LINEAR(DATE, ID) |    0 |     0 | ACCOUNTADMIN | 1              |
+---------------------------------+---------+---------------+-------------+-------+---------+------------------+------+-------+--------------+----------------+

테이블의 열에 대한 데이터 정렬 지정하기:

CREATE TABLE collation_demo (
  uncollated_phrase VARCHAR, 
  utf8_phrase VARCHAR COLLATE 'utf8',
  english_phrase VARCHAR COLLATE 'en',
  spanish_phrase VARCHAR COLLATE 'sp'
  );

INSERT INTO collation_demo (uncollated_phrase, utf8_phrase, english_phrase, spanish_phrase) 
   VALUES ('pinata', 'pinata', 'pinata', 'piñata');

Avro, Parquet 또는 ORC 데이터를 포함하는 스테이징된 파일 세트에서 열 정의가 파생되는 테이블을 만듭니다.

문에서 참조하는 mystage 스테이지와 my_parquet_format 파일 형식이 이미 있어야 합니다. 스테이지 정의에서 참조하는 클라우드 저장소 위치에 파일 세트가 이미 스테이징되어 있어야 합니다.

이 예는 INFER_SCHEMA 항목의 예를 기반으로 합니다.

CREATE TABLE mytable
  USING TEMPLATE (
    SELECT ARRAY_AGG(OBJECT_CONSTRUCT(*))
      FROM TABLE(
        INFER_SCHEMA(
          LOCATION=>'@mystage',
          FILE_FORMAT=>'my_parquet_format'
        )
      ));

세션이 끝날 때 자동으로 삭제되는 임시 테이블을 만듭니다.

create temporary table demo_temporary (i integer);
create temp      table demo_temp      (i integer);

다른 벤더와의 호환성을 위해, Snowflake는 아래 키워드를 TEMPORARY의 동의어로 사용하는 것도 지원합니다.

create local temporary table demo_local_temporary (i integer);
create local temp      table demo_local_temp      (i integer);

create global temporary table demo_global_temporary (i integer);
create global temp      table demo_global_temp      (i integer);

create volatile table demo_volatile (i integer);
맨 위로 이동