카테고리:

DML 명령 - 데이터 로딩

COPY INTO <테이블>

스테이징된 파일에서 기존 테이블로 데이터를 로딩합니다. 파일은 다음 위치 중 하나에 이미 스테이징되어 있어야 합니다.

  • 명명된 내부 스테이지(또는 테이블/사용자 스테이지). PUT 명령을 사용하여 파일을 스테이징할 수 있습니다.

  • 외부 위치를 참조하는 명명된 외부 스테이지(Amazon S3, Google Cloud Storage 또는 Microsoft Azure).

    사용자는 검색하기 전에 복원이 필요한 아카이브 클라우드 저장소 클래스에 있는 데이터에 액세스할 수 없습니다. 이러한 아카이브 저장소 클래스로는 예를 들어 Amazon S3 Glacier Flexible Retrieval 또는 Glacier Deep Archive 저장소 클래스 또는 Microsoft Azure Archive Storage 등이 있습니다.

  • 외부 위치(Amazon S3, Google Cloud Storage 또는 Microsoft Azure).

참고 항목:

COPY INTO <위치>

이 항목의 내용:

구문

/* Standard data load */
COPY INTO [<namespace>.]<table_name>
     FROM { internalStage | externalStage | externalLocation }
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |
                    TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ copyOptions ]
[ VALIDATION_MODE = RETURN_<n>_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS ]

/* Data load with transformation */
COPY INTO [<namespace>.]<table_name> [ ( <col_name> [ , <col_name> ... ] ) ]
     FROM ( SELECT [<alias>.]$<file_col_num>[.<element>] [ , [<alias>.]$<file_col_num>[.<element>] ... ]
            FROM { internalStage | externalStage } )
[ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
[ PATTERN = '<regex_pattern>' ]
[ FILE_FORMAT = ( { FORMAT_NAME = '[<namespace>.]<file_format_name>' |
                    TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
[ copyOptions ]

여기서:

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[/<path>]
externalStage ::=
  @[<namespace>.]<ext_stage_name>[/<path>]
externalLocation (for Amazon S3) ::=
  's3://<bucket>[/<path>]'
  [ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( {  { AWS_KEY_ID = '<string>' AWS_SECRET_KEY = '<string>' [ AWS_TOKEN = '<string>' ] } } ) } ]
  [ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] |
                   [ TYPE = 'AWS_SSE_S3' ] |
                   [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] |
                   [ TYPE = 'NONE' ] ) ]
externalLocation (for Google Cloud Storage) ::=
  'gcs://<bucket>[/<path>]'
  [ STORAGE_INTEGRATION = <integration_name> ]
  [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]
externalLocation (for Microsoft Azure) ::=
  'azure://<account>.blob.core.windows.net/<container>[/<path>]'
  [ { STORAGE_INTEGRATION = <integration_name> } | { CREDENTIALS = ( [ AZURE_SAS_TOKEN = <string> ] ) } ]
  [ ENCRYPTION = ( [ TYPE = { 'AZURE_CSE' | NONE } ] [ MASTER_KEY = '<string>' ] ) ]
formatTypeOptions ::=
-- If FILE_FORMAT = ( TYPE = CSV ... )
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     RECORD_DELIMITER = '<character>' | NONE
     FIELD_DELIMITER = '<character>' | NONE
     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 FILE_FORMAT = ( 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>' ... ] )
     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 FILE_FORMAT = ( TYPE = AVRO ... )
     COMPRESSION = AUTO | GZIP | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If FILE_FORMAT = ( TYPE = ORC ... )
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If FILE_FORMAT = ( TYPE = PARQUET ... )
     COMPRESSION = AUTO | SNAPPY | NONE
     BINARY_AS_TEXT = TRUE | FALSE
     TRIM_SPACE = TRUE | FALSE
     NULL_IF = ( '<string>' [ , '<string>' ... ] )
-- If FILE_FORMAT = ( 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
     LOAD_UNCERTAIN_FILES = TRUE | FALSE

필수 매개 변수

[namespace.]table_name

데이터가 로딩되는 대상 테이블의 이름을 지정합니다.

네임스페이스는 database_name.schema_name 또는 schema_name 형식으로 테이블의 데이터베이스 및/또는 스키마를 선택적으로 지정합니다. 데이터베이스와 스키마가 현재 사용자 세션 내에서 사용 중인 경우 이는 선택 사항 입니다. 사용 중이지 않으면 필수 사항입니다.

FROM ...

로딩할 데이터가 있는 파일을 스테이징하는 내부 또는 외부 위치를 지정합니다.

@[namespace.]int_stage_name[/path]

파일이 지정된 명명된 내부 스테이지에 있습니다.

@[namespace.]ext_stage_name[/path]

파일이 지정된 명명된 외부 스테이지에 있습니다.

@[namespace.]%table_name[/path]

파일이 지정된 테이블의 스테이지에 있습니다.

@~[/path]

파일이 현재 사용자의 스테이지에 있습니다.

's3://bucket[/path]'

파일이 지정된 외부 위치(S3 버킷)에 있습니다. 추가 매개 변수가 필요할 수도 있습니다. 자세한 내용은 이 항목에 있는 추가 클라우드 공급자 매개 변수 섹션을 참조하십시오.

'gcs://bucket[/path]'

파일이 지정된 외부 위치(Google Cloud Storage 버킷)에 있습니다. 추가 매개 변수가 필요할 수 있습니다. 자세한 내용은 이 항목에 있는 추가 클라우드 공급자 매개 변수 섹션을 참조하십시오.

'azure://account.blob.core.windows.net/container[/path]'

파일이 지정된 외부 위치(Azure 컨테이너)에 있습니다. 추가 매개 변수가 필요할 수도 있습니다. 자세한 내용은 이 항목에 있는 추가 클라우드 공급자 매개 변수 섹션을 참조하십시오.

여기서:

  • namespacedatabase_name.schema_name 또는 schema_name 형식의 내부 또는 외부 스테이지가 있는 데이터베이스 및/또는 스키마입니다. 데이터베이스와 스키마가 현재 사용자 세션 내에서 사용 중인 경우 이는 선택 사항 입니다. 사용 중이지 않으면 필수 사항입니다.

  • path 는 로딩할 파일 세트를 제한하는 클라우드 저장소 위치에 있는 파일의 선택적 경로로, 대/소문자를 구분합니다(즉, 파일 이름이 공통 문자열로 시작함). 다른 클라우드 저장소 서비스에서는 경로를 접두사 또는 폴더 라고도 합니다.

    《경로》는 이름의 리터럴 접두사이므로, /.//../ 와 같은 상대 경로 한정자는 문자 그대로 해석됩니다. 예:

    -- S3 bucket
    COPY INTO mytable FROM 's3://mybucket/./../a.csv';
    
    -- Google Cloud Storage bucket
    COPY INTO mytable FROM 'gcs://mybucket/./../a.csv';
    
    -- Azure container
    COPY INTO mytable FROM 'azure://myaccount.blob.core.windows.net/mycontainer/./../a.csv';
    

    이러한 COPY 문에서 Snowflake는 외부 위치에 문자 그대로 ./../a.csv 로 명명된 파일을 찾습니다.

참고

  • 내부 또는 외부 스테이지나 경로 이름에 공백을 포함한 특수 문자가 포함된 경우, FROM ... 문자열을 작은따옴표로 묶습니다.

  • FROM ... 값은 리터럴 상수여야 합니다. 이 값이 SQL 변수 일 수는 없습니다.

추가 클라우드 공급자 매개 변수

STORAGE_INTEGRATION = integration_name 또는 . CREDENTIALS = ( cloud_specific_credentials )

COPY 문의 FROM 값이 외부 스테이지 이름이 아닌 외부 저장소 URI일 때 지원됩니다. 클라우드 공급자에 연결하기 위한 목적 및 데이터 파일이 스테이징되는 개인/보호된 저장소 컨테이너에 액세스하기 위한 목적의 보안 자격 증명을 지정합니다.

외부 개인/보호된 클라우드 저장소 위치에서 로딩하는 경우에만 필요하며, 공용 버킷/컨테이너에는 필요하지 않음

Amazon S3

STORAGE_INTEGRATION = integration_name

외부 클라우드 저장소에 대한 인증 책임을 Snowflake ID 및 액세스 관리(IAM) 엔터티에 위임하는 데 사용되는 저장소 통합의 이름을 지정합니다. 자세한 내용은 CREATE STORAGE INTEGRATION 섹션을 참조하십시오.

참고

저장소 통합을 꼭 사용하는 것이 좋습니다. 이 옵션을 사용하면 스테이지를 만들거나 데이터를 로딩할 때 CREDENTIALS 매개 변수를 사용하여 클라우드 저장소 자격 증명을 제공할 필요가 없습니다.

CREDENTIALS = ( AWS_KEY_ID = 'string' AWS_SECRET_KEY = 'string' [ AWS_TOKEN = 'string' ] )

AWS에 연결하고 로딩할 파일이 스테이징되는 개인/보호된 S3 버킷에 액세스하기 위한 보안 자격 증명을 지정합니다. 자세한 내용은 Amazon S3에 대한 보안 액세스 구성하기 섹션을 참조하십시오.

지정하는 자격 증명은 버킷에 대한 Snowflake 액세스 허가를 AWS IAM(Identity & Access Management) 사용자 또는 역할과 연결했는지 여부에 따라 다릅니다.

  • IAM 사용자: 임시 IAM 자격 증명이 필요합니다. 임시(일명 《범위 지정》) 자격 증명은 AWS STS(Security Token Service)에 의해 생성되며 다음 세 가지 구성 요소로 이루어집니다.

    • AWS_KEY_ID

    • AWS_SECRET_KEY

    • AWS_TOKEN

    개인/보호된 버킷에 액세스하려면 세 가지가 모두 필요합니다. 지정된 기간이 지나면 임시 자격 증명이 만료되어 더 이상 사용할 수 없습니다. 그런 다음 유효한 임시 자격 증명으로 구성된 새 세트를 생성해야 합니다.

    중요

    COPY 명령에는 자격 증명과 같은 복잡한 구문과 중요한 정보가 포함됩니다. 또한, 이런 명령은 자주 실행되고 스크립트나 워크시트에 종종 저장되므로, 중요한 정보가 실수로 노출될 수 있습니다. COPY 명령을 사용하면 영구적인(일명 《장기》) 자격 증명을 사용할 수도 있지만, 보안상의 이유로 COPY 명령에 영구적인 자격 증명을 사용하지 마십시오. 대신에 임시 자격 증명을 사용하십시오.

    영구적인 자격 증명을 사용해야 하는 경우, 외부 스테이지 를 사용하여 자격 증명을 한 번 입력하고 안전하게 저장해 노출 가능성을 최소화하십시오.

  • IAM 역할: 보안 자격 증명과 액세스 키를 생략하고, 그 대신 AWS_ROLE 을 사용하여 역할을 식별하고 AWS 역할 ARN(Amazon Resource Name)을 지정합니다.

Google Cloud Storage

STORAGE_INTEGRATION = integration_name

외부 클라우드 저장소에 대한 인증 책임을 Snowflake ID 및 액세스 관리(IAM) 엔터티에 위임하는 데 사용되는 저장소 통합의 이름을 지정합니다. 자세한 내용은 CREATE STORAGE INTEGRATION 섹션을 참조하십시오.

Microsoft Azure

STORAGE_INTEGRATION = integration_name

외부 클라우드 저장소에 대한 인증 책임을 Snowflake ID 및 액세스 관리(IAM) 엔터티에 위임하는 데 사용되는 저장소 통합의 이름을 지정합니다. 자세한 내용은 CREATE STORAGE INTEGRATION 섹션을 참조하십시오.

참고

저장소 통합을 꼭 사용하는 것이 좋습니다. 이 옵션을 사용하면 스테이지를 만들거나 데이터를 로딩할 때 CREDENTIALS 매개 변수를 사용하여 클라우드 저장소 자격 증명을 제공할 필요가 없습니다.

CREDENTIALS = ( AZURE_SAS_TOKEN = 'string' )

Azure에 연결하고 데이터를 포함한 파일을 스테이징하는 개인/보호된 컨테이너에 액세스하기 위해 SAS(공유 액세스 서명) 토큰을 지정합니다. 자격 증명은 Azure에서 생성됩니다.

ENCRYPTION = ( cloud_specific_encryption )

애드혹 COPY 문(명명된 외부 스테이지를 참조하지 않는 문)에 사용합니다. 암호화된 파일에서 로딩하는 경우에만 필요하며, 파일이 암호화되지 않은 경우에는 필요하지 않습니다. 저장소 위치에서 암호화된 파일의 암호를 해독하는 데 사용되는 암호화 설정을 지정합니다.

Amazon S3

ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '<string>' ] | [ TYPE = 'AWS_SSE_S3' ] | [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '<string>' ] ] | [ TYPE = 'NONE' ] )

TYPE = ...

사용되는 암호화 유형을 지정합니다. 가능한 값은 다음과 같습니다.

  • AWS_CSE: 클라이언트 측 암호화(MASTER_KEY 값 필요). 현재, 사용자가 제공하는 클라이언트 측 마스터 키는 대칭 키만 될 수 있습니다. MASTER_KEY 값을 제공하면 Snowflake는 TYPE = AWS_CSE 로 간주합니다(즉, MASTER_KEY 값을 제공할 때 TYPE 이 필요하지 않음).

  • AWS_SSE_S3: 추가 암호화 설정이 필요 없는 서버 측 암호화입니다.

  • AWS_SSE_KMS: 선택적 KMS_KEY_ID 값을 허용하는 서버 측 암호화입니다.

  • NONE: 암호화가 없습니다.

암호화 유형에 대한 자세한 내용은 클라이언트 측 암호화 또는 서버 측 암호화 에 대한 AWS 설명서를 참조하십시오.

MASTER_KEY = 'string' (AWS_CSE 암호화에만 적용)

버킷의 파일을 암호화하는 데 사용되는 클라이언트 측 마스터 키를 지정합니다. 마스터 키는 Base64 인코딩 형식의 128비트 또는 256비트 키여야 합니다.

KMS_KEY_ID = 'string' (AWS_SSE_KMS 암호화에만 적용)

버킷으로 언로딩된 파일을 암호화하는 데 사용되는 AWS KMS 관리 키의 ID를 선택적으로 지정합니다. 아무런 값도 입력하지 않으면 언로딩 시 기본 KMS 키 ID를 사용해 파일을 암호화합니다.

데이터를 로딩할 때는 이 값을 무시합니다.

Google Cloud Storage

ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' | 'NONE' ] [ KMS_KEY_ID = 'string' ] )

TYPE = ...

사용되는 암호화 유형을 지정합니다. 가능한 값은 다음과 같습니다.

KMS_KEY_ID = 'string' (GCS_SSE_KMS 암호화에만 적용)

버킷으로 언로딩된 파일을 암호화하는 데 사용되는 Cloud KMS 관리 키의 ID를 선택적으로 지정합니다. 아무런 값도 입력하지 않으면 언로딩 시 버킷에 대해 설정된 기본 KMS 키 ID를 사용해 파일을 암호화합니다.

데이터를 로딩할 때는 이 값을 무시합니다. 서비스 계정이 버킷에 있는 데이터의 암호를 해독하는 데 충분한 권한을 가지고 있다면 로딩 작업에 성공할 것입니다.

Microsoft Azure

ENCRYPTION = ( [ TYPE = 'AZURE_CSE' | 'NONE' ] [ MASTER_KEY = 'string' ] )

TYPE = ...

사용되는 암호화 유형을 지정합니다. 가능한 값은 다음과 같습니다.

  • AZURE_CSE: 클라이언트 측 암호화(MASTER_KEY 값 필요). 자세한 내용은 Microsoft Azure 설명서에서 클라이언트 측 암호화 정보 를 참조하십시오.

  • NONE: 암호화가 없습니다.

MASTER_KEY = 'string' (AZURE_CSE 암호화에만 적용)

파일을 암호 해독하는 데 사용되는 클라이언트 측 마스터 키를 지정합니다. 마스터 키는 Base64 인코딩 형식의 128비트 또는 256비트 키여야 합니다.

변환 매개 변수

( SELECT [alias.]$file_col_num[.element] [ , [alias.]$file_col_num[.element] ... ] FROM ... [ alias ] )

로딩 중 데이터 변환에 필요함

스테이지 상태 데이터 파일에서 로딩할 명시적 필드/열 세트(쉼표로 구분)를 지정합니다. 필드/열은 표준 SQL 쿼리(즉, SELECT 목록)를 사용하여 파일에서 선택되며, 다음 사항을 참조하십시오.

alias

FROM 값의 선택적 별칭을 지정합니다(예: COPY INTO t1 (c1) FROM (SELECT d.$1 FROM @mystage/file1.csv.gz d);d).

file_col_num

로딩할 데이터가 있는 (파일 내) 필드/열의 위치 번호를 지정합니다(첫 번째 필드는 1 , 두 번째 필드는 2 등).

element

데이터 파일에서 반복되는 값의 경로 및 요소 이름을 지정합니다(반정형 데이터 파일 에만 적용됨).

SELECT 목록은 로딩하는 원본 데이터 파일에서 번호가 매겨진 필드/열 세트를 정의합니다. 이 목록은 대상 테이블의 열 시퀀스와 일치해야 합니다. 선택적 ( col_name [ , col_name ... ] ) 매개 변수를 사용하여 목록을 대상 테이블의 특정 열에 매핑할 수 있습니다.

데이터 파일의 실제 필드/열 순서는 대상 테이블의 열 순서와 다를 수 있습니다. SELECT 목록이 데이터 파일의 필드/열을 테이블의 해당 열에 매핑하는 것만 중요합니다.

참고

변환에 사용되는 SELECT 문이 모든 함수를 지원하는 것은 아닙니다. 지원되는 함수의 전체 목록과 예를 포함한 데이터 로딩 변환에 대한 자세한 내용은 로드 중 데이터 변환하기 의 사용법 노트를 참조하십시오.

또한, 데이터 로딩 변환은 오직 사용자 스테이지 및 명명된 스테이지(내부 또는 외부)에서의 데이터 선택만 지원합니다.

( col_name [ , col_name ... ] )

선택적으로 데이터를 삽입할 테이블 열(쉼표로 구분)의 명시적 목록을 지정합니다.

  • 첫 번째 열은 로딩된 파일에서 추출된 첫 번째 필드/열에서 생성된 값을 사용합니다.

  • 두 번째 열은 로딩된 파일에서 추출된 두 번째 필드/열에서 생성된 값을 사용합니다.

  • 이런 식으로 지정된 순서대로 사용합니다.

이 목록에서 열을 반복할 수 없습니다. 이 열 목록에서 제외된 열은 모두 기본값(지정되지 않은 경우 NULL)으로 채워집니다. 하지만 제외된 열은 시퀀스를 기본값으로 가질 수 없습니다.

선택적 매개 변수

FILES = ( 'file_name' [ , 'file_name' ... ] )

로딩할 하나 이상의 파일 이름(쉼표로 구분)으로 구성된 목록을 지정합니다. Snowflake 내부 위치나 명령에 지정된 외부 위치에 파일이 이미 스테이징되어 있어야 합니다. 지정된 파일을 찾을 수 없는 경우 COPY 문에 다른 ON_ERROR 옵션을 명시적으로 설정하지 않으면 기본 동작 ON_ERROR = ABORT_STATEMENT 가 로딩 작업을 중단합니다.

지정할 수 있는 파일 이름의 최대 개수는 1,000개입니다.

참고

외부 스테이지(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)의 경우에만 파일 경로가 스테이지 정의의 URL과 확인된 파일 이름의 목록을 연결하여 설정됩니다.

하지만 Snowflake는 경로와 파일 이름 사이에 암시적으로 구분 기호를 삽입하지 않습니다. 스테이지 정의에서 URL의 끝 부분이나 이 매개 변수에 지정된 각 파일 이름의 시작 부분에 구분 기호(/)를 명시적으로 포함해야 합니다.

PATTERN = 'regex_pattern'

작은따옴표로 묶인 정규식 패턴 문자열로, 일치시킬 파일 이름 및/또는 경로를 지정합니다.

최상의 성능을 위해서는 많은 수의 파일을 필터링하는 패턴을 적용하지 마십시오.

이 복사 옵션에 대한 지원은 Snowpipe 전용 미리 보기 기능 으로 제공됩니다. 이 복사 옵션은 일반적으로 COPY INTO <테이블> 문을 사용한 대량 데이터 로딩에 사용할 수 있습니다.

정규식은 대량 데이터 로딩과 Snowpipe 데이터 로딩에 서로 다르게 적용됨에 유의하십시오.

  • Snowpipe는 저장소 위치에서 스테이지 정의의 경로 세그먼트를 모두 자르고 나머지 경로 세그먼트와 파일 이름에 정규식을 적용합니다. 스테이지 정의를 보려면 스테이지에 대해 DESCRIBE STAGE 명령을 실행하십시오. URL 속성은 버킷 또는 컨테이너 이름과 0개 또는 그 이상의 경로 세그먼트로 구성됩니다. 예를 들어 COPY INTO <테이블> 문에서 FROM 위치가 @s/path1/path2/ 이고 스테이지 @s 의 URL 값이 s3://mybucket/path1/ 인 경우, Snowpipe는 FROM 절의 저장소 위치에서 /path1/ 을 자르고 경로에서 path2/ 와 파일 이름에 정규식을 적용합니다.

  • 대량 데이터 로딩 작업은 정규식을 FROM 절의 전체 저장소 위치에 적용합니다.

FILE_FORMAT = ( FORMAT_NAME = 'file_format_name' ) 또는 . 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_NAMETYPE 은 상호 배타적인데, 같은 COPY 명령에서 둘 다 지정하면 예기치 않은 동작이 발생할 수 있습니다.

COPY_OPTIONS = ( ... )

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

VALIDATION_MODE = RETURN_n_ROWS | RETURN_ERRORS | RETURN_ALL_ERRORS

데이터 파일을 지정된 테이블에 로딩하는 대신 COPY 명령에 데이터 파일의 유효성을 검사하도록 지시하는 문자열(상수)입니다. 즉, COPY 명령은 파일에 오류가 있는지 테스트하되, 파일을 로딩하지는 않습니다. 이 명령은 로딩할 데이터의 유효성을 검사하고 지정된 유효성 검사 옵션에 따라 결과를 반환합니다.

지원되는 값

참고

RETURN_n_ROWS (예: RETURN_10_ROWS)

오류가 발생하지 않으면 지정된 수의 행을 검증하며, 그렇지 않으면 행에서 처음 오류가 발생할 때 실패합니다.

RETURN_ERRORS

COPY 문에 지정된 모든 파일에서 모든 오류(구문 분석, 변환 등)를 반환합니다.

RETURN_ALL_ERRORS

ON_ERROR 복사 옵션이 로딩 중에 CONTINUE 로 설정되었으므로 이전의 로딩 중에 부분적으로 로딩된 오류가 있는 파일을 포함하여 COPY 문에 지정된 모든 파일에서 모든 오류를 반환합니다.

참고

  • VALIDATION_MODE 는 로딩 중에 데이터를 변환하는 COPY 문을 지원하지 않습니다. 이 매개 변수를 지정하면 COPY 문이 오류를 반환합니다.

  • 이전 로딩 중에 발생한 모든 오류를 보려면 VALIDATE 테이블 함수를 사용하십시오. 또한, 이 함수는 로딩 중에 데이터를 변환하는 COPY 문을 지원하지 않습니다.

형식 유형 옵션(formatTypeOptions)

지정된 파일 형식 유형(FILE_FORMAT = ( TYPE = ... ))에 따라 다음 형식별 옵션(공백, 쉼표 또는 줄 바꿈으로 구분) 중 하나 이상을 포함할 수 있습니다.

TYPE = CSV

COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE

로딩할 데이터 파일에 대한 현재 압축 알고리즘을 지정하는 문자열(상수)입니다. Snowflake는 이 옵션을 사용하여 이미 압축된 데이터 파일을 압축한 방식을 감지해 로드를 위해 파일의 압축 데이터를 추출할 수 있습니다.

지원되는 값

참고

AUTO

현재 자동으로 감지할 수 없는 Brotli 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. Brotli 압축 파일을 로딩하는 경우 AUTO 대신 BROTLI 를 명시적으로 사용합니다.

GZIP

BZ2

BROTLI

Brotli 압축 파일을 로딩할 때 지정해야 합니다.

ZSTD

Zstandard v0.8 이상이 지원됩니다.

DEFLATE

Deflate 압축 파일(zlib 헤더 RFC1950 포함).

RAW_DEFLATE

원시 Deflate 압축 파일(헤더 RFC1951 제외).

NONE

로딩할 데이터 파일이 압축되지 않았습니다.

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 플랫폼에서 파일에 대한 줄 바꿈으로 이해되게끔 하는 논리입니다.

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 의 값도 허용합니다.

기본값: 쉼표(,)

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 세션 매개 변수의 값이 사용됩니다.

기본값: AUTO

TIME_FORMAT = 'string' | AUTO

로딩할 데이터 파일의 시간 값 형식을 정의하는 문자열입니다. 값이 지정되지 않거나 AUTO 인 경우 TIME_INPUT_FORMAT 세션 매개 변수의 값이 사용됩니다.

기본값: AUTO

TIMESTAMP_FORMAT = 'string' | AUTO

로딩할 데이터 파일의 타임스탬프 값 형식을 정의하는 문자열입니다. 값이 지정되지 않거나 AUTO 인 경우 TIMESTAMP_INPUT_FORMAT 세션 매개 변수의 값이 사용됩니다.

기본값: AUTO

BINARY_FORMAT = HEX | BASE64 | UTF8

이진 입력 또는 출력의 인코딩 형식을 정의하는 문자열(상수)입니다. 이 옵션은 테이블의 이진 열로 데이터를 로딩할 때만 적용됩니다.

기본값: HEX

ESCAPE = 'character' | NONE
용도

데이터 로딩 및 언로딩

정의

괄호로 묶인 필드 값에 대해서만 이스케이프 문자로 사용되는 싱글바이트 문자입니다. 이스케이프 문자는 문자 시퀀스의 후속 문자에 대한 대체 해석을 호출합니다. ESCAPE 문자를 사용하여 데이터에 있는 FIELD_OPTIONALLY_ENCLOSED_BY 문자의 인스턴스를 리터럴로 해석할 수 있습니다.

일반적인 이스케이프 시퀀스(예: 탭은 \t, 줄 바꿈은 \n, 캐리지 리턴은 \r, 백슬래시는 \\), 8진수 값 또는 16진수 값을 허용합니다.

참고

이 파일 형식 옵션은 싱글바이트 문자만 지원합니다. UTF-8 문자 인코딩은 상위 ASCII 문자를 멀티바이트 문자로 나타냅니다. 데이터 파일이 UTF-8 문자 세트로 인코딩된 경우 상위 ASCII 문자를 옵션 값으로 지정할 수 없습니다.

또한 상위 ASCII 문자를 지정하는 경우 ENCODING = 'string' 파일 형식 옵션을 데이터 파일의 문자 인코딩으로 설정하여 문자가 올바르게 해석되도록 보장하는 것이 좋습니다.

기본값

NONE

ESCAPE_UNENCLOSED_FIELD = 'character' | NONE
용도

데이터 로딩 및 언로딩

정의

괄호로 묶이지 않은 필드 값에 대해서만 이스케이프 문자로 사용되는 싱글바이트 문자입니다. 이스케이프 문자는 문자 시퀀스의 후속 문자에 대한 대체 해석을 호출합니다. ESCAPE 문자를 사용하여 데이터에 있는 FIELD_DELIMITER 또는 RECORD_DELIMITER 문자의 인스턴스를 리터럴로 해석할 수 있습니다. 이스케이프 문자는 데이터에서 자신의 인스턴스를 이스케이프하는 데 사용할 수도 있습니다.

일반적인 이스케이프 시퀀스(예: 탭은 \t, 줄 바꿈은 \n, 캐리지 리턴은 \r, 백슬래시는 \\), 8진수 값 또는 16진수 값을 허용합니다.

참고

  • 기본값은 \\ 입니다. 데이터 파일의 행이 백슬래시(\) 문자로 끝날 경우 이 문자는 RECORD_DELIMITER 파일 형식 옵션에 대해 지정된 줄 바꿈 또는 캐리지 리턴 문자를 이스케이프합니다. 결과적으로, 로딩 작업에서 이 행과 다음 행을 단일 데이터 행으로 처리합니다. 이 문제를 방지하려면 값을 NONE 으로 설정하십시오.

  • 이 파일 형식 옵션은 싱글바이트 문자만 지원합니다. UTF-8 문자 인코딩은 상위 ASCII 문자를 멀티바이트 문자로 나타냅니다. 데이터 파일이 UTF-8 문자 세트로 인코딩된 경우 상위 ASCII 문자를 옵션 값으로 지정할 수 없습니다.

    또한 상위 ASCII 문자를 지정하는 경우 ENCODING = 'string' 파일 형식 옵션을 데이터 파일의 문자 인코딩으로 설정하여 문자가 올바르게 해석되도록 보장하는 것이 좋습니다.

기본값

백슬래시(\\)

TRIM_SPACE = TRUE | FALSE

필드에서 공백을 제거할지 여부를 지정하는 부울입니다.

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

또 다른 예로, 선행 또는 후행 공백이 문자열을 묶는 따옴표 주위에 있는 경우 TRIM_SPACE 옵션을 사용하여 주위의 공백을 제거하고 FIELD_OPTIONALLY_ENCLOSED_BY 옵션을 사용하여 따옴표를 제거할 수 있습니다. 따옴표 안의 모든 공백은 그대로 유지됩니다.

예를 들어, 필드 구분 기호가 |FIELD_OPTIONALLY_ENCLOSED_BY = '"' 라고 가정하면 다음 항목이

|"Hello world"|
|" Hello world "|
| "Hello world" |

아래와 같이 됩니다.

+---------------+
| C1            |
|----+----------|
| Hello world   |
|  Hello world  |
| 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', '')

이 옵션에는 빈 문자열이 포함될 수 있습니다.

기본값: \\N (즉, ESCAPE_UNENCLOSED_FIELD 값이 \\ (기본값)인 것으로 가정하는 NULL)

ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE

입력 데이터 파일의 구분된 열(즉, 필드) 수가 해당 테이블의 열 수와 일치하지 않는 경우 구문 분석 오류를 생성할지 여부를 지정하는 부울입니다.

FALSE 로 설정하면 오류가 발생하지 않고 로딩이 계속됩니다. 파일이 성공적으로 로딩된 경우 다음과 같습니다.

  • 입력 파일에 테이블의 열보다 많은 수의 필드가 있는 레코드가 포함된 경우 일치하는 필드는 파일에서 나오는 순서대로 로딩되고 나머지 필드는 로딩되지 않습니다.

  • 입력 파일에 테이블의 열보다 적은 수의 필드가 있는 레코드가 포함된 경우 테이블에서 일치하지 않는 열이 NULL 값과 함께 로딩됩니다.

이 옵션에서는 입력 파일 내의 모든 레코드가 같은 길이라고 가정합니다(즉, 이 옵션에 대해 지정된 값과 관계없이 다양한 길이의 레코드를 포함한 파일이 오류를 반환함).

기본값: TRUE

참고

로딩하는 동안 데이터 변환 시(즉, 쿼리를 COPY INTO <테이블> 명령의 소스로 사용), 이 옵션은 무시됩니다. 데이터 파일의 열 개수 및 순서는 대상 테이블과 같지 않아도 됩니다.

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 INTO <테이블> 명령에서 오류가 발생합니다.

기본값: 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 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. Brotli 압축 파일을 로딩하는 경우 AUTO 대신 BROTLI 를 명시적으로 사용합니다.

GZIP

BZ2

BROTLI

ZSTD

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)

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 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. Brotli 압축 파일을 로딩하는 경우 AUTO 대신 BROTLI 를 명시적으로 사용합니다.

GZIP

BROTLI

ZSTD

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 | SNAPPY | NONE

로딩할 데이터 파일에 대한 현재 압축 알고리즘을 지정하는 문자열(상수)입니다. Snowflake는 이 옵션을 사용하여 이미 압축된 데이터 파일을 압축한 방식을 감지해 로드를 위해 파일의 압축 데이터를 추출할 수 있습니다.

지원되는 값

참고

AUTO

압축 알고리즘이 자동으로 감지됩니다. Brotli, gzip, Lempel-Ziv-Oberhumer(LZO), LZ4, Snappy 또는 Zstandard v0.8 이상의 압축 알고리즘을 지원합니다.

SNAPPY

NONE

로딩할 데이터 파일이 압축되지 않았습니다.

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 압축 파일을 제외하고 압축 알고리즘이 자동으로 감지됩니다. Brotli 압축 파일을 로딩하는 경우 AUTO 대신 BROTLI 를 명시적으로 사용합니다.

GZIP

BZ2

BROTLI

ZSTD

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)

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

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 문에 쿼리가 포함된 경우에는 데이터를 변환합니다.

기본값

NONE

참고

현재는 다음 제한 사항이 적용됩니다.

  • COPY 문에 MATCH_BY_COLUMN_NAME을 VALIDATION_MODE 매개 변수와 함께 사용하여 스테이징 상태 데이터를 대상 테이블에 로딩하는 대신 유효성 검사를 할 수 없습니다.

  • Parquet 데이터만 해당. MATCH_BY_COLUMN_NAME이 CASE_SENSITIVE 또는 CASE_INSENSITIVE 로 설정되어 있을 때는 열 값이 비어 있는 경우(예: "col1": "") 오류가 발생합니다.

ENFORCE_LENGTH = TRUE | FALSE
정의

(다른 시스템과의 호환성을 위해) 반대 논리를 가진 TRUNCATECOLUMNS 의 대체 구문

대상 열 길이를 초과하는 텍스트 문자열을 자를지 여부를 지정하는 부울입니다.

  • TRUE 인 경우 COPY 문 실행 시 로딩된 문자열이 대상 열 길이를 초과하면 오류가 발생합니다.

  • FALSE 인 경우에는 문자열이 대상 열 길이에 맞춰 자동으로 잘립니다.

이 복사 옵션은 관계형 테이블에 있는 별개의 열에 로딩 시 반정형 데이터의 문자열 값뿐 아니라 CSV 데이터도 지원합니다.

기본값

TRUE

참고

  • 대상 문자열 열의 길이가 최대값(예: VARCHAR (16777216))으로 설정된 경우 수신 문자열은 이 길이를 초과할 수 없으며, 그렇지 않으면 COPY 명령에서 오류가 발생합니다.

  • 이 매개 변수는 기능적으로는 TRUNCATECOLUMNS 와 같지만, 동작은 반대로 이루어집니다. 이 매개 변수는 다른 데이터베이스와의 호환성을 위해 제공됩니다. 원하는 출력을 생성하려면 COPY 문에 이 두 매개 변수 중 하나만 포함해야 합니다.

TRUNCATECOLUMNS = TRUE | FALSE
정의

(다른 시스템과의 호환성을 위해) 반대 논리를 가진 ENFORCE_LENGTH 의 대체 구문

대상 열 길이를 초과하는 텍스트 문자열을 자를지 여부를 지정하는 부울입니다.

  • TRUE 인 경우에는 문자열이 대상 열 길이에 맞춰 자동으로 잘립니다.

  • FALSE 인 경우 COPY 문 실행 시 로딩된 문자열이 대상 열 길이를 초과하면 오류가 발생합니다.

이 복사 옵션은 관계형 테이블에 있는 별개의 열에 로딩 시 반정형 데이터의 문자열 값뿐 아니라 CSV 데이터도 지원합니다.

기본값

FALSE

참고

  • 대상 문자열 열의 길이가 최대값(예: VARCHAR (16777216))으로 설정된 경우 수신 문자열은 이 길이를 초과할 수 없으며, 그렇지 않으면 COPY 명령에서 오류가 발생합니다.

  • 이 매개 변수는 기능적으로는 ENFORCE_LENGTH 와 같지만, 동작은 반대로 이루어집니다. 이 매개 변수는 다른 데이터베이스와의 호환성을 위해 제공됩니다. 원하는 출력을 생성하려면 COPY 문에 이 두 매개 변수 중 하나만 포함해야 합니다.

FORCE = TRUE | FALSE
정의

이전에 로딩되었고 그 이후로 변경되지 않았는지 여부와는 관계없이 모든 파일을 로딩하도록 지정하는 부울입니다. 이 옵션은 파일을 다시 로딩하여 테이블의 데이터를 복제할 수 있습니다.

기본값

FALSE

LOAD_UNCERTAIN_FILES = TRUE | FALSE
정의

로드 상태를 알 수 없는 파일을 로딩하도록 지정하는 부울입니다. COPY 명령은 기본적으로 이러한 파일을 건너뜁니다.

다음 조건이 모두 참이면 로드 상태를 알 수 없습니다.

  • 파일의 LAST_MODIFIED 날짜(즉, 파일을 스테이징한 날짜)가 64일보다 오래되었습니다.

  • 초기 데이터 세트가 65일 이상 전에 테이블에 로딩되었습니다.

  • 파일을 테이블에 성공적으로 이미 로딩한 경우 이 이벤트가 65일 이상 전에 발생한 것입니다.

로드 상태를 알고 있는지 여부와 관계없이 COPY 명령이 모든 파일을 강제로 로딩하도록 하려면 FORCE 옵션을 대신 사용하십시오.

로드 상태 불확실성에 대한 자세한 내용은 오래된 파일 로드하기 섹션을 참조하십시오.

기본값

FALSE

사용법 노트

  • 테이블의 자체 스테이지에서 테이블로 로딩할 경우 FROM 절이 필요하지 않으며 생략할 수 있습니다.

  • 로딩하는 동안 데이터 변환 시(즉, 쿼리를 COPY 명령의 소스로 사용):

    • 명명된 스테이지(내부 또는 외부)와 사용자 스테이지에서만 파일에서 데이터를 선택할 수 있습니다. 테이블 스테이지에서는 이 기능이 지원되지 않습니다.

    • CSV와 반정형 파일 형식이 지원되지만, 반정형 데이터(예: JSON)를 로딩할 때도 CSV를 파일 형식 유형(기본값)으로 설정해야 합니다. 해당 파일 형식(예: JSON)을 사용할 수 있지만, ON_ERROR 옵션을 설정하여 파일을 계속하거나 건너뛰더라도 변환 시 어떤 오류가 발생하든 COPY 작업이 중지됩니다.

      또한, 파일 형식 옵션 FIELD_DELIMITER = NONE 을 설정합니다.

    • 로딩 작업 중에 JSON 데이터를 변환하려면 데이터 파일을 NDJSON (《줄 바꿈으로 구분된 JSON》) 표준 형식으로 구조화해야 하며, 그렇지 않으면 다음 오류가 발생할 수 있습니다.

      Error parsing JSON: more than one document in the input

    • SELECT 문의 DISTINCT 키워드는 완전히 지원되지는 않습니다. 이 키워드를 지정하면 일관되지 않거나 예기치 않은 ON_ERROR 복사 옵션 동작이 발생할 수 있습니다.

  • Google Cloud Storage에서만 로딩: 외부 스테이지에 대해 반환된 오브젝트의 목록에 하나 이상의 《디렉터리 blob》이 포함될 수 있는데, 기본적으로 슬래시 문자(/)로 끝나는 경로이며 예를 들면 다음과 같습니다.

    LIST @my_gcs_stage;
    
    +---------------------------------------+------+----------------------------------+-------------------------------+
    | name                                  | size | md5                              | last_modified                 |
    |---------------------------------------+------+----------------------------------+-------------------------------|
    | my_gcs_stage/load/                    |  12  | 12348f18bcb35e7b6b628ca12345678c | Mon, 11 Sep 2019 16:57:43 GMT |
    | my_gcs_stage/load/data_0_0_0.csv.gz   |  147 | 9765daba007a643bdff4eae10d43218y | Mon, 11 Sep 2019 18:13:07 GMT |
    +---------------------------------------+------+----------------------------------+-------------------------------+
    

    Google에서 제공하는 다른 도구를 사용하지 않고 Google Cloud Platform 콘솔에서 디렉터리를 만들 때 이러한 blob이 나열됩니다.

    오브젝트 목록에 디렉터리 blob이 포함되면 스테이지를 참조하는 COPY 문이 실패할 수 있습니다. 오류를 방지하려면 스테이지의 파일 목록에 디렉터리 blob이 포함된 경우 파일 패턴(즉, PATTERN 절) 일치를 사용하여 포함할 파일을 식별하는 것이 좋습니다. 예는 이 항목에 있는 패턴 일치를 사용하여 로딩 섹션을 참조하십시오. 또는 COPY 문에 ON_ERROR = SKIP_FILE을 설정합니다.

  • 현재 네임스페이스(현재 사용자 세션에서 활성 상태의 데이터베이스와 스키마)의 파일 형식을 참조하는 경우 형식 식별자를 둘러싸는 작은따옴표를 생략할 수 있습니다.

  • STORAGE_INTEGRATION, CREDENTIALS, ENCRYPTION 은 개인/보호된 저장소 위치에서 직접 로딩하는 경우에만 적용됩니다.

    • 공용 버킷에서 로딩하는 경우 보안 액세스가 필요하지 않습니다.

    • 명명된 외부 스테이지에서 로딩하는 경우 스테이지에서 버킷에 액세스하는 데 필요한 모든 자격 증명 정보를 제공합니다.

  • COPY 명령을 실행하는 동안 오류가 발생하면 명령이 완료된 후 VALIDATE 테이블 함수를 사용하여 오류를 생성한 파일의 유효성을 검사할 수 있습니다.

    참고

    VALIDATE 함수는 표준 데이터 로딩을 수행하는 데 사용되는 COPY 명령의 출력만 반환하며, 데이터 로딩(예: 데이터 열의 일부 로딩 또는 데이터 열 재정렬) 중 변환을 수행하는 COPY 명령은 지원하지 않습니다.

  • FORCE = TRUE 를 복사 옵션 중 하나로 명시적으로 지정하지 않을 경우 이 명령은 테이블로 이미 로딩된 스테이지 상태 데이터 파일을 무시합니다. 데이터를 다시 로딩하려면 FORCE = TRUE 를 지정하거나 파일을 수정하고 다시 스테이징해야 새 체크섬이 생성됩니다.

  • COPY 명령은 Parquet 파일의 데이터 타입 변환의 유효성을 검사하지 않습니다.

출력

이 명령은 다음과 같은 열을 반환합니다.

열 이름

데이터 타입

설명

FILE

TEXT

원본 파일의 이름과 파일의 상대 경로

STATUS

TEXT

상태: 로딩됨, 로딩 실패 또는 일부 로딩됨

ROWS_PARSED

NUMBER

소스 파일에서 구분 분석된 행 수

ROWS_LOADED

NUMBER

소스 파일에서 로딩된 행 수

ERROR_LIMIT

NUMBER

오류 수가 이 한계에 도달하면 중단함

ERRORS_SEEN

NUMBER

소스 파일에 있는 오류 행의 수

FIRST_ERROR

TEXT

소스 파일의 첫 번째 오류

FIRST_ERROR_LINE

NUMBER

첫 번째 오류의 줄 번호

FIRST_ERROR_CHARACTER

NUMBER

첫 번째 오류 문자의 위치

FIRST_ERROR_COLUMN_NAME

TEXT

첫 번째 오류의 열 이름

데이터 로딩 변환의 예는 로드 중 데이터 변환하기 을 참조하십시오.

내부 스테이지에서 파일 로딩

참고

이러한 예에서는 PUT 명령을 사용하여 파일을 이전 스테이지로 복사한 것으로 가정합니다.

명명된 내부 스테이지에서 테이블로 파일 로딩:

COPY INTO mytable
FROM @my_int_stage;

테이블의 스테이지에서 테이블로 파일 로딩:

COPY INTO mytable
FILE_FORMAT = (TYPE = CSV);

참고

테이블 위치의 파일에서 데이터를 복사할 때, Snowflake가 테이블 위치에 있는 파일을 자동으로 검사하므로 FROM 절을 생략할 수 있습니다.

사용자의 개인 스테이지에서 테이블로 파일 로딩:

COPY INTO mytable from @~/staged
FILE_FORMAT = (FORMAT_NAME = 'mycsv');

명명된 외부 스테이지에서 파일 로딩

CREATE STAGE 명령을 사용하여 이전에 만들어 명명한 외부 스테이지에서 파일을 로딩합니다. 명명된 외부 스테이지는 외부 위치(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)를 참조하고 이 위치에 액세스하는 데 필요한 모든 자격 증명과 기타 세부 정보를 포함합니다.

COPY INTO mycsvtable
  FROM @my_ext_stage/tutorials/dataloading/contacts1.csv;

외부 위치에서 직접 파일 로딩

다음 예에서는 명명된 my_csv_format 파일 형식을 사용하여 저장소 위치(Amazon S3, Google Cloud Storage 또는 Microsoft Azure)에서 data/files 접두사가 붙은 모든 파일을 로딩합니다.

Amazon S3

이름이 myint 인 참조된 저장소 통합을 사용하여 참조된 S3 버킷에 액세스:

COPY INTO mytable
  FROM s3://mybucket/data/files
  STORAGE_INTEGRATION = myint
  ENCRYPTION=(MASTER_KEY = 'eSxX0jzYfIamtnBKOEOwq80Au6NbSgPH5r4BDDwOaO8=')
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);

제공된 자격 증명을 사용하여 참조된 S3 버킷에 액세스:

COPY INTO mytable
  FROM s3://mybucket/data/files
  CREDENTIALS=(AWS_KEY_ID='$AWS_ACCESS_KEY_ID' AWS_SECRET_KEY='$AWS_SECRET_ACCESS_KEY')
  ENCRYPTION=(MASTER_KEY = 'eSxX0jzYfIamtnBKOEOwq80Au6NbSgPH5r4BDDwOaO8=')
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);

Google Cloud Storage

이름이 myint 인 참조된 저장소 통합을 사용하여 참조된 GCS 버킷에 액세스:

COPY INTO mytable
  FROM 'gcs://mybucket/data/files'
  STORAGE_INTEGRATION = myint
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);

Microsoft Azure

이름이 myint 인 참조된 저장소 통합을 사용하여 참조된 컨테이너에 액세스:

COPY INTO mytable
  FROM 'azure://myaccount.blob.core.windows.net/data/files'
  STORAGE_INTEGRATION = myint
  ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPxX0jzYfIamtnJEUTHwq80Au6NbSgPH5r4BDDwOaO8=')
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);

제공된 자격 증명을 사용하여 참조된 컨테이너에 액세스:

COPY INTO mytable
  FROM 'azure://myaccount.blob.core.windows.net/mycontainer/data/files'
  CREDENTIALS=(AZURE_SAS_TOKEN='?sv=2016-05-31&ss=b&srt=sco&sp=rwdl&se=2018-06-27T10:05:50Z&st=2017-06-27T02:05:50Z&spr=https,http&sig=bgqQwoXwxzuD2GJfagRg7VOS8hzNr3QLT7rhS8OFRLQ%3D')
  ENCRYPTION=(TYPE='AZURE_CSE' MASTER_KEY = 'kPxX0jzYfIamtnJEUTHwq80Au6NbSgPH5r4BDDwOaO8=')
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);

패턴 일치를 사용하여 로딩

임의의 경로에서 압축된 CSV 파일의 데이터만 로딩하기 위한 패턴 일치를 사용하여 테이블의 스테이지에서 테이블로 파일을 로딩합니다.

COPY INTO mytable
  FILE_FORMAT = (TYPE = 'CSV')
  PATTERN='.*/.*/.*[.]csv[.]gz';

여기서 .* 는 《임의의 문자 0회 또는 그 이상 발생》으로 해석됩니다. 대괄호는 파일 확장명 앞에 있는 마침표 문자(.)를 이스케이프합니다.

이름에 문자열 sales 가 포함된 압축되지 않은 CSV 파일만 로딩하려면 패턴 일치를 사용하여 테이블 스테이지에서 테이블로 파일을 로딩하십시오.

COPY INTO mytable
  FILE_FORMAT = (FORMAT_NAME = myformat)
  PATTERN='.*sales.*[.]csv';

VARIANT 열로 JSON 데이터 로딩

다음 예에서는 VARIANT 형식의 단일 열이 있는 테이블로 JSON 데이터를 로딩합니다.

스테이지 상태 JSON 배열은 다음과 같이 줄 바꿈으로 구분되는 세 오브젝트로 구성됩니다.

[{
    "location": {
      "city": "Lexington",
      "zip": "40503",
      },
      "sq__ft": "1000",
      "sale_date": "4-25-16",
      "price": "75836"
},
{
    "location": {
      "city": "Belmont",
      "zip": "02478",
      },
      "sq__ft": "1103",
      "sale_date": "6-18-16",
      "price": "92567"
}
{
    "location": {
      "city": "Winchester",
      "zip": "01890",
      },
      "sq__ft": "1122",
      "sale_date": "1-31-16",
      "price": "89921"
}]
/* Create a JSON file format that strips the outer array. */

CREATE OR REPLACE FILE FORMAT json_format
  TYPE = 'JSON'
  STRIP_OUTER_ARRAY = TRUE;

/* Create an internal stage that references the JSON file format. */

CREATE OR REPLACE STAGE mystage
  FILE_FORMAT = json_format;

/* Stage the JSON file. */

PUT file:///tmp/sales.json @mystage AUTO_COMPRESS=TRUE;

/* Create a target table for the JSON data. */

CREATE OR REPLACE TABLE house_sales (src VARIANT);

/* Copy the JSON data into the target table. */

COPY INTO house_sales
   FROM @mystage/sales.json.gz;

SELECT * FROM house_sales;

+---------------------------+
| SRC                       |
|---------------------------|
| {                         |
|   "location": {           |
|     "city": "Lexington",  |
|     "zip": "40503"        |
|   },                      |
|   "price": "75836",       |
|   "sale_date": "4-25-16", |
|   "sq__ft": "1000",       |
|   "type": "Residential"   |
| }                         |
| {                         |
|   "location": {           |
|     "city": "Belmont",    |
|     "zip": "02478"        |
|   },                      |
|   "price": "92567",       |
|   "sale_date": "6-18-16", |
|   "sq__ft": "1103",       |
|   "type": "Residential"   |
| }                         |
| {                         |
|   "location": {           |
|     "city": "Winchester", |
|     "zip": "01890"        |
|   },                      |
|   "price": "89921",       |
|   "sale_date": "1-31-16", |
|   "sq__ft": "1122",       |
|   "type": "Condo"         |
| }                         |
+---------------------------+

파일 다시 로딩

변경되지 않은(즉, 처음 로딩되었을 때와 같은 체크섬을 가진) 스테이지 상태 데이터 파일 세트에서 데이터를 다시 로딩(복제)하려면 COPY 명령에 FORCE = TRUE 를 추가하십시오.

다음 예에서, 첫 번째 명령은 지정된 파일을 로딩하고 두 번째 명령은 파일 내용이 변경되지 않았더라도 똑같은 파일을 강제로 다시 로딩합니다(중복 행 생성).

COPY INTO load1 FROM @%load1/data1/
    FILES=('test1.csv', 'test2.csv');

COPY INTO load1 FROM @%load1/data1/
    FILES=('test1.csv', 'test2.csv')
    FORCE=TRUE;

로딩 후 파일 제거

테이블의 스테이지에서 테이블로 파일을 로딩하고 로딩 후 파일을 제거합니다. 기본적으로, COPY는 이 위치에서 로딩된 파일을 제거하지 않습니다. 로딩 후 파일을 제거하려면 다음을 수행하십시오.

  • 로딩 후 테이블에 성공적으로 로딩된 모든 파일을 제거하도록 지정하려면 테이블에 대해 PURGE=TRUE 를 설정하십시오.

    ALTER TABLE mytable SET STAGE_COPY_OPTIONS = (PURGE = TRUE);
    
    COPY INTO mytable;
    
  • COPY 명령에서 직접 복사 옵션을 재정의할 수도 있습니다.

    COPY INTO mytable PURGE = TRUE;
    

스테이징된 파일 유효성 검사

로딩하지 않고 스테이지에서 파일 유효성 검사:

  • 유효성 검사 모드에서 COPY 명령을 실행하고 모든 오류를 확인합니다.

    COPY INTO mytable VALIDATION_MODE = 'RETURN_ERRORS';
    
    +-------------------------------------------------------------------------------------------------------------------------------+------------------------+------+-----------+-------------+----------+--------+-----------+----------------------+------------+----------------+
    |                                                         ERROR                                                                 |            FILE        | LINE | CHARACTER | BYTE_OFFSET | CATEGORY |  CODE  | SQL_STATE |   COLUMN_NAME        | ROW_NUMBER | ROW_START_LINE |
    +-------------------------------------------------------------------------------------------------------------------------------+------------------------+------+-----------+-------------+----------+--------+-----------+----------------------+------------+----------------+
    | Field delimiter ',' found while expecting record delimiter '\n'                                                               | @MYTABLE/data1.csv.gz  | 3    | 21        | 76          | parsing  | 100016 | 22000     | "MYTABLE"["QUOTA":3] | 3          | 3              |
    | NULL result in a non-nullable column. Use quotes if an empty field should be interpreted as an empty string instead of a null | @MYTABLE/data3.csv.gz  | 3    | 2         | 62          | parsing  | 100088 | 22000     | "MYTABLE"["NAME":1]  | 3          | 3              |
    | End of record reached while expected to parse column '"MYTABLE"["QUOTA":3]'                                                   | @MYTABLE/data3.csv.gz  | 4    | 20        | 96          | parsing  | 100068 | 22000     | "MYTABLE"["QUOTA":3] | 4          | 4              |
    +-------------------------------------------------------------------------------------------------------------------------------+------------------------+------+-----------+-------------+----------+--------+-----------+----------------------+------------+----------------+
    
  • 지정된 행 수에 대해 유효성 검사 모드에서 COPY 명령을 실행합니다. 이 예에서는 처음 실행할 때 지정된 행 수에서 오류가 발생하지 않고 성공적으로 완료되어 테이블에 로딩될 때 나타날 정보를 표시합니다. 두 번째로 실행하면 지정된 행 수에서 오류가 발생하고 다음 오류와 함께 실패합니다.

    COPY INTO mytable VALIDATION_MODE = 'RETURN_2_ROWS';
    
    +--------------------+----------+-------+
    |        NAME        |    ID    | QUOTA |
    +--------------------+----------+-------+
    | Joe Smith          |  456111  | 0     |
    | Tom Jones          |  111111  | 3400  |
    +--------------------+----------+-------+
    
    COPY INTO mytable VALIDATION_MODE = 'RETURN_3_ROWS';
    
    FAILURE: NULL result in a non-nullable column. Use quotes if an empty field should be interpreted as an empty string instead of a null
      File '@MYTABLE/data3.csv.gz', line 3, character 2
      Row 3, column "MYTABLE"["NAME":1]
    
맨 위로 이동