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 ]
Copy

์—ฌ๊ธฐ์„œ

internalStage ::=
    @[<namespace>.]<int_stage_name>[/<path>]
  | @[<namespace>.]%<table_name>[/<path>]
  | @~[/<path>]
Copy
externalStage ::=
  @[<namespace>.]<ext_stage_name>[/<path>]
Copy
externalLocation (for Amazon S3) ::=
  '<protocol>://<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' ] ) ]
Copy
externalLocation (for Google Cloud Storage) ::=
  'gcs://<bucket>[/<path>]'
  [ STORAGE_INTEGRATION = <integration_name> ]
  [ ENCRYPTION = ( [ TYPE = 'GCS_SSE_KMS' ] [ KMS_KEY_ID = '<string>' ] | [ TYPE = 'NONE' ] ) ]
Copy
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>' ] ) ]
Copy
formatTypeOptions ::=
-- If FILE_FORMAT = ( TYPE = CSV ... )
     COMPRESSION = AUTO | GZIP | BZ2 | BROTLI | ZSTD | DEFLATE | RAW_DEFLATE | NONE
     RECORD_DELIMITER = '<string>' | NONE
     FIELD_DELIMITER = '<string>' | NONE
     MULTI_LINE = TRUE | FALSE
     PARSE_HEADER = TRUE | FALSE
     SKIP_HEADER = <integer>
     SKIP_BLANK_LINES = TRUE | FALSE
     DATE_FORMAT = '<string>' | AUTO
     TIME_FORMAT = '<string>' | AUTO
     TIMESTAMP_FORMAT = '<string>' | AUTO
     BINARY_FORMAT = HEX | BASE64 | UTF8
     ESCAPE = '<character>' | NONE
     ESCAPE_UNENCLOSED_FIELD = '<character>' | NONE
     TRIM_SPACE = TRUE | FALSE
     FIELD_OPTIONALLY_ENCLOSED_BY = '<character>' | NONE
     NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] )
     ERROR_ON_COLUMN_COUNT_MISMATCH = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     EMPTY_FIELD_AS_NULL = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
     ENCODING = '<string>' | UTF8
-- If 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
     MULTI_LINE = 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
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] )
-- If FILE_FORMAT = ( TYPE = ORC ... )
     TRIM_SPACE = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     NULL_IF = ( [ '<string>' [ , '<string>' ... ] ] )
-- If FILE_FORMAT = ( TYPE = PARQUET ... )
     COMPRESSION = AUTO | SNAPPY | NONE
     BINARY_AS_TEXT = TRUE | FALSE
     USE_LOGICAL_TYPE = TRUE | FALSE
     TRIM_SPACE = TRUE | FALSE
     USE_VECTORIZED_SCANNER = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = 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_AUTO_CONVERT = TRUE | FALSE
     REPLACE_INVALID_CHARACTERS = TRUE | FALSE
     SKIP_BYTE_ORDER_MARK = TRUE | FALSE
Copy
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
     INCLUDE_METADATA = ( <column_name> = METADATA$<field> [ , <column_name> = METADATA${field} ... ] )
     ENFORCE_LENGTH = TRUE | FALSE
     TRUNCATECOLUMNS = TRUE | FALSE
     FORCE = TRUE | FALSE
     LOAD_UNCERTAIN_FILES = TRUE | FALSE
     FILE_PROCESSOR = (SCANNER = <custom_scanner_type> SCANNER_OPTIONS = (<scanner_options>))
     LOAD_MODE = { FULL_INGEST | ADD_FILES_COPY }
Copy

ํ•„์ˆ˜ ๋งค๊ฐœ ๋ณ€์ˆ˜ยถ

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

ํŒŒ์ผ์ด ํ˜„์žฌ ์‚ฌ์šฉ์ž์˜ ์Šคํ…Œ์ด์ง€์— ์žˆ์Šต๋‹ˆ๋‹ค.

'protocol://bucket[/path]'

ํŒŒ์ผ์ด ์ง€์ •๋œ ์™ธ๋ถ€ ์œ„์น˜(S3 ๋ฒ„ํ‚ท)์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ํ•ญ๋ชฉ์— ์žˆ๋Š” ์ถ”๊ฐ€ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

'gcs://bucket[/path]'

ํŒŒ์ผ์ด ์ง€์ •๋œ ์™ธ๋ถ€ ์œ„์น˜(Google Cloud Storage ๋ฒ„ํ‚ท)์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ํ•ญ๋ชฉ์— ์žˆ๋Š” ์ถ”๊ฐ€ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

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

ํŒŒ์ผ์ด ์ง€์ •๋œ ์™ธ๋ถ€ ์œ„์น˜(Azure ์ปจํ…Œ์ด๋„ˆ)์— ์žˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ํ•„์š”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ด ํ•ญ๋ชฉ์— ์žˆ๋Š” ์ถ”๊ฐ€ ํด๋ผ์šฐ๋“œ ๊ณต๊ธ‰์ž ๋งค๊ฐœ ๋ณ€์ˆ˜ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์—ฌ๊ธฐ์„œ

  • namespace ๋Š” database_name.schema_name ๋˜๋Š” schema_name ํ˜•์‹์˜ ๋‚ด๋ถ€ ๋˜๋Š” ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€๊ฐ€ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ฐ/๋˜๋Š” ์Šคํ‚ค๋งˆ์ž…๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์™€ ์Šคํ‚ค๋งˆ๊ฐ€ ํ˜„์žฌ ์‚ฌ์šฉ์ž ์„ธ์…˜ ๋‚ด์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ๊ฒฝ์šฐ ์ด๋Š” ์„ ํƒ ์‚ฌํ•ญ ์ž…๋‹ˆ๋‹ค. ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์œผ๋ฉด ํ•„์ˆ˜ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค.

  • protocol ์€ ๋‹ค์Œ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค.

    • s3 ์€ ์ค‘๊ตญ ์™ธ๋ถ€์— ์žˆ๋Š” ๊ณต์šฉ AWS ๋ฆฌ์ „์˜ S3 ์ €์žฅ์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • s3china ๋Š” ์ค‘๊ตญ์— ์žˆ๋Š” ๊ณต์šฉ AWS ๋ฆฌ์ „์˜ S3 ์ €์žฅ์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    • s3gov ๋Š” ์ •๋ถ€ ๋ฆฌ์ „ ์˜ S3 ์ €์žฅ์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

    ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ถ€ ๋ฆฌ์ „ ์˜ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์€ ๋™์ผํ•œ ์ •๋ถ€ ๋ฆฌ์ „์— ํ˜ธ์ŠคํŒ…๋œ Snowflake ๊ณ„์ •์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

    ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, ์ค‘๊ตญ์— ์žˆ๋Š” ๋ฆฌ์ „์˜ ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ค‘๊ตญ ๋‚ด ๋™์ผํ•œ ๋ฆฌ์ „์— ํ˜ธ์ŠคํŒ…๋œ Snowflake ๊ณ„์ •์—์„œ๋งŒ ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  CREATE STAGE ๋ช…๋ น์— CREDENTIALS ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ธ์ฆ์„ ์œ„ํ•œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์ œ๊ณตํ•˜์‹ญ์‹œ์˜ค.

  • bucket ์€ ๋ฒ„ํ‚ท์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

  • account ๋Š” Azure ๊ณ„์ •์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: myaccount). Data Lake Storage Gen2๋ฅผ ํฌํ•จํ•˜์—ฌ, ์ง€์›๋˜๋Š” ๋ชจ๋“  ํƒ€์ž…์˜ Azure blob ์ €์žฅ์†Œ ๊ณ„์ •์— ๋Œ€ํ•ด blob.core.windows.net ์—”๋“œํฌ์ธํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

    ํ˜„์žฌ, ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ถ€ ๋ฆฌ์ „ ์˜ Azure blob ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒƒ์€ ๋™์ผํ•œ ์ •๋ถ€ ๋ฆฌ์ „์˜ Azure์— ํ˜ธ์ŠคํŒ…๋œ Snowflake ๊ณ„์ •์œผ๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค. ์ง์ ‘ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ถ€ ๋ฆฌ์ „ ์™ธ๋ถ€์— ํ˜ธ์ŠคํŒ…๋œ ๊ณ„์ •์—์„œ blob ์ €์žฅ์†Œ์— ์•ก์„ธ์Šคํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • container ๋Š” Azure ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค(์˜ˆ: mycontainer).

  • 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

    ์ด๋Ÿฌํ•œ 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 = ...

์‚ฌ์šฉ๋˜๋Š” ์•”ํ˜ธํ™” ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

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 ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ์— ์„œ๋กœ ๋‹ค๋ฅด๊ฒŒ ์ ์šฉ๋จ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

  • Snowpipe๋Š” ์ €์žฅ์†Œ ์œ„์น˜์—์„œ ์Šคํ…Œ์ด์ง€ ์ •์˜์˜ ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ๋ฅผ ๋ชจ๋‘ ์ž๋ฅด๊ณ  ๋‚˜๋จธ์ง€ ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ์™€ ํŒŒ์ผ ์ด๋ฆ„์— ์ •๊ทœ์‹์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์Šคํ…Œ์ด์ง€ ์ •์˜๋ฅผ ๋ณด๋ ค๋ฉด ์Šคํ…Œ์ด์ง€์— ๋Œ€ํ•ด DESCRIBE STAGE ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. URL ์†์„ฑ์€ ๋ฒ„ํ‚ท ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ ์ด๋ฆ„๊ณผ 0๊ฐœ ๋˜๋Š” ๊ทธ ์ด์ƒ์˜ ๊ฒฝ๋กœ ์„ธ๊ทธ๋จผํŠธ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด COPY INTO <ํ…Œ์ด๋ธ”> ๋ฌธ์—์„œ FROM ์œ„์น˜๊ฐ€ @s/path1/path2/ ์ด๊ณ  ์Šคํ…Œ์ด์ง€ @s ์˜ URL ๊ฐ’์ด s3://mybucket/path1/ ์ธ ๊ฒฝ์šฐ, Snowpipe๋Š” FROM ์ ˆ์˜ ์ €์žฅ์†Œ ์œ„์น˜์—์„œ /path1/ ์„ ์ž๋ฅด๊ณ  ๊ฒฝ๋กœ์—์„œ path2/ ์™€ ํŒŒ์ผ ์ด๋ฆ„์— ์ •๊ทœ์‹์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€๋Ÿ‰ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ž‘์—…์€ ์ •๊ทœ์‹์„ FROM ์ ˆ์˜ ์ „์ฒด ์ €์žฅ์†Œ ์œ„์น˜์— ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

FILES ๋ฐ PATTERN ์˜ต์…˜์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ FILES ์˜ต์…˜์— ์ง€์ •๋œ ๊ฒฝ๋กœ๋งŒ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์˜ต์…˜์€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

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_NAME ๋ฐ TYPE ์€ ์ƒํ˜ธ ๋ฐฐํƒ€์ ์ธ๋ฐ, ๊ฐ™์€ 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 ๋ฌธ์ด ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

  • VALIDATION_MODE ๋Š” Snowflake ๊ด€๋ฆฌ ํ…Œ์ด๋ธ”์— LOAD_MODE ๋ณต์‚ฌ๋ณธ ์„ ํƒ ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•  ๋•Œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ์ด์ „ ๋กœ๋”ฉ ์ค‘์— ๋ฐœ์ƒํ•œ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ๋ณด๋ ค๋ฉด 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

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์••์ถ•๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

AUTO

RECORD_DELIMITER = 'string' | NONE

์ž…๋ ฅ ํŒŒ์ผ์—์„œ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค ๋˜๋Š” ๋‹ค์Œ ์‹ฑ๊ธ€๋ฐ”์ดํŠธ ๋˜๋Š” ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹ฑ๊ธ€๋ฐ”์ดํŠธ ๋ฌธ์ž:

8์ง„์ˆ˜ ๊ฐ’(\\ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Œ) ๋˜๋Š” 16์ง„์ˆ˜ ๊ฐ’(0x ๋˜๋Š” \x ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Œ). ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณก์ ˆ ์•…์„ผํŠธ(^) ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋œ ๋ ˆ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 8์ง„์ˆ˜(\\136) ๋˜๋Š” 16์ง„์ˆ˜(0x5e) ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž:

16์ง„์ˆ˜ ๊ฐ’(\x ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Œ). ์˜ˆ๋ฅผ ๋“ค์–ด, ์„ผํŠธ(ยข) ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋œ ๋ ˆ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 16์ง„์ˆ˜(\xC2\xA2) ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

RECORD_DELIMITER ๋˜๋Š” FIELD_DELIMITER ์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb').

์ง€์ •๋œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ์ž„์˜์˜ ๋ฐ”์ดํŠธ ์‹œํ€€์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์œ ํšจํ•œ UTF-8 ๋ฌธ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ์ตœ๋Œ€ 20์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

NONE ์˜ ๊ฐ’๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

์ค„ ๋ฐ”๊ฟˆ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. โ€œ์ค„ ๋ฐ”๊ฟˆโ€์€ \r\n ์ด Windows ํ”Œ๋žซํผ์—์„œ ํŒŒ์ผ์— ๋Œ€ํ•œ ์ค„ ๋ฐ”๊ฟˆ์œผ๋กœ ์ดํ•ด๋˜๊ฒŒ๋” ํ•˜๋Š” ๋…ผ๋ฆฌ์ž…๋‹ˆ๋‹ค.

FIELD_DELIMITER = 'string' | NONE

์ž…๋ ฅ ํŒŒ์ผ์—์„œ ํ•„๋“œ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์‹ฑ๊ธ€๋ฐ”์ดํŠธ ๋˜๋Š” ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์ธ ์ด์Šค์ผ€์ดํ”„ ์‹œํ€€์Šค ๋˜๋Š” ๋‹ค์Œ ์‹ฑ๊ธ€๋ฐ”์ดํŠธ ๋˜๋Š” ๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

์‹ฑ๊ธ€๋ฐ”์ดํŠธ ๋ฌธ์ž:

8์ง„์ˆ˜ ๊ฐ’(\\ ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Œ) ๋˜๋Š” 16์ง„์ˆ˜ ๊ฐ’(0x ๋˜๋Š” \x ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Œ). ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ณก์ ˆ ์•…์„ผํŠธ(^) ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋œ ๋ ˆ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 8์ง„์ˆ˜(\\136) ๋˜๋Š” 16์ง„์ˆ˜(0x5e) ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ฉ€ํ‹ฐ๋ฐ”์ดํŠธ ๋ฌธ์ž:

16์ง„์ˆ˜ ๊ฐ’(\x ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์Œ). ์˜ˆ๋ฅผ ๋“ค์–ด, ์„ผํŠธ(ยข) ๋ฌธ์ž๋กœ ๊ตฌ๋ถ„๋œ ๋ ˆ์ฝ”๋“œ์˜ ๊ฒฝ์šฐ 16์ง„์ˆ˜(\xC2\xA2) ๊ฐ’์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

RECORD_DELIMITER ๋˜๋Š” FIELD_DELIMITER ์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ๋‹ค๋ฅธ ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์˜ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ์˜ ํ•˜์œ„ ๋ฌธ์ž์—ด์ด ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค(์˜ˆ: FIELD_DELIMITER = 'aa' RECORD_DELIMITER = 'aabb').

์ฐธ๊ณ 

๋น„ ASCII ๋ฌธ์ž์˜ ๊ฒฝ์šฐ ๊ฒฐ์ •์  ๋™์ž‘์„ ์–ป์œผ๋ ค๋ฉด 16์ง„์ˆ˜ ๋ฐ”์ดํŠธ ์‹œํ€€์Šค ๊ฐ’์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ง€์ •๋œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ์ž„์˜์˜ ๋ฐ”์ดํŠธ ์‹œํ€€์Šค๊ฐ€ ์•„๋‹ˆ๋ผ ์œ ํšจํ•œ UTF-8 ๋ฌธ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๋Š” ์ตœ๋Œ€ 20์ž๋กœ ์ œํ•œ๋ฉ๋‹ˆ๋‹ค.

NONE ์˜ ๊ฐ’๋„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

์‰ผํ‘œ(,)

MULTI_LINE = TRUE | FALSE

์—ฌ๋Ÿฌ ์ค„ ํ—ˆ์šฉ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

MULTI_LINE ์ด FALSE ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ  ์ง€์ •๋œ ๋ ˆ์ฝ”๋“œ ๊ตฌ๋ถ„ ๊ธฐํ˜ธ๊ฐ€ CSV ํ•„๋“œ ๋‚ด์— ์žˆ๋Š” ๊ฒฝ์šฐ ํ•ด๋‹น ํ•„๋“œ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ ˆ์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

TRUE

PARSE_HEADER = TRUE | FALSE

์—ด ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰ ๋จธ๋ฆฌ๊ธ€์„ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ ๋‹ค์Œ ์ž‘์—…์—๋งŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • INFER_SCHEMA ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ด ์ •์˜๋ฅผ ์ž๋™์œผ๋กœ ๊ฐ์ง€.

  • INFER_SCHEMA ํ•จ์ˆ˜ ๋ฐ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ CSV ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐœ๋ณ„ ์—ด์— ๋กœ๋“œ.

์ด ์˜ต์…˜์„ TRUE๋กœ ์„ค์ •ํ•˜๋ฉด ์ฒซ ๋ฒˆ์งธ ํ–‰ ๋จธ๋ฆฌ๊ธ€์„ ์‚ฌ์šฉํ•ด ์—ด ์ด๋ฆ„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’ FALSE๋กœ ๊ทธ๋Œ€๋กœ ๋‘๋ฉด ์—ด ์ด๋ฆ„์ด c ๋กœ ๋ฐ˜ํ™˜๋˜๋ฉฐ ์—ฌ๊ธฐ์„œ ๋Š” ์—ด์˜ ์œ„์น˜์ž…๋‹ˆ๋‹ค.

PARSE_HEADER = TRUE์ธ ๊ฒฝ์šฐ SKIP_HEADER ์˜ต์…˜์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

SKIP_HEADER = integer

ํŒŒ์ผ ์‹œ์ž‘์—์„œ ๊ฑด๋„ˆ๋›ธ ์ค„์˜ ๊ฐœ์ˆ˜์ž…๋‹ˆ๋‹ค.

์ฐธ๊ณ ๋กœ, SKIP_HEADER๋Š” ํ—ค๋” ์ค„์ด ๋ฌด์—‡์ธ์ง€ ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด RECORD_DELIMITER ๋˜๋Š” FIELD_DELIMITER ๊ฐ’์„ ์‚ฌ์šฉํ•˜์ง€๋Š” ์•Š์œผ๋ฉฐ, ์˜คํžˆ๋ ค ํŒŒ์ผ์—์„œ ์ง€์ •๋œ ์ˆ˜๋งŒํผ CRLF(์บ๋ฆฌ์ง€ ๋ฆฌํ„ด, ์ค„ ๋ฐ”๊ฟˆ)๋กœ ๊ตฌ๋ถ„๋œ ์ค„์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ RECORD_DELIMITER์™€ FIELD_DELIMITER๋ฅผ ์‚ฌ์šฉํ•ด ๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํ–‰์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

0

SKIP_BLANK_LINES = TRUE | FALSE
์šฉ๋„:

๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ „์šฉ

์ •์˜:

๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ๋ฐœ๊ฒฌ๋˜๋Š” ๋นˆ ์ค„์„ ๊ฑด๋„ˆ๋›ฐ๋„๋ก ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋นˆ ์ค„๋กœ ์ธํ•ด ๋ ˆ์ฝ”๋“œ ๋ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค(๊ธฐ๋ณธ ๋™์ž‘).

๊ธฐ๋ณธ๊ฐ’:

FALSE

DATE_FORMAT = 'string' | AUTO

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋‚ ์งœ ๊ฐ’ ํ˜•์‹์„ ์ •์˜ํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. ๊ฐ’์ด ์ง€์ •๋˜์ง€ ์•Š๊ฑฐ๋‚˜ AUTO ์ธ ๊ฒฝ์šฐ DATE_INPUT_FORMAT ์„ธ์…˜ ๋งค๊ฐœ ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

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" |
Copy

์•„๋ž˜์™€ ๊ฐ™์ด ๋ฉ๋‹ˆ๋‹ค.

+---------------+
| C1            |
|----+----------|
| Hello world   |
|  Hello world  |
| Hello world   |
+---------------+
Copy
๊ธฐ๋ณธ๊ฐ’:

FALSE

FIELD_OPTIONALLY_ENCLOSED_BY = 'character' | NONE

๋ฌธ์ž์—ด์„ ๋ฌถ๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์ž…๋‹ˆ๋‹ค. ๊ฐ’์€ NONE, ์ž‘์€๋”ฐ์˜ดํ‘œ ๋ฌธ์ž(') ๋˜๋Š” ํฐ๋”ฐ์˜ดํ‘œ ๋ฌธ์ž(")์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž‘์€๋”ฐ์˜ดํ‘œ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด 8์ง„์ˆ˜ ๋˜๋Š” 16์ง„์ˆ˜ ํ‘œํ˜„(0x27) ๋˜๋Š” ์ด์ค‘ ์ž‘์€๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์ธ ์ด์Šค์ผ€์ดํ”„('')๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ๊ฐ’:

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

ํžˆ๋ธŒ๋ฆฌ์–ด

IBM949

IBM949

ํ•œ๊ตญ์–ด

ISO-2022-CN

ISO2022CN

์ค‘๊ตญ์–ด ๊ฐ„์ฒด

ISO-2022-JP

ISO2022JP

์ผ๋ณธ์–ด

ISO-2022-KR

ISO2022KR

ํ•œ๊ตญ์–ด

ISO-8859-1

ISO88591

๋ด๋งˆํฌ์–ด, ๋„ค๋œ๋ž€๋“œ์–ด, ์˜์–ด, ํ”„๋ž‘์Šค์–ด, ๋…์ผ์–ด, ์ดํƒˆ๋ฆฌ์•„์–ด, ๋…ธ๋ฅด์›จ์ด์–ด, ํฌ๋ฅดํˆฌ๊ฐˆ์–ด, ์Šค์›จ๋ด์–ด

ISO-8859-2

ISO88592

์ฒด์ฝ”์–ด, ํ—๊ฐ€๋ฆฌ์–ด, ํด๋ž€๋“œ์–ด, ๋ฃจ๋งˆ๋‹ˆ์•„์–ด

ISO-8859-5

ISO88595

๋Ÿฌ์‹œ์•„์–ด

ISO-8859-6

ISO88596

์•„๋ž์–ด

ISO-8859-7

ISO88597

๊ทธ๋ฆฌ์Šค์–ด

ISO-8859-8

ISO88598

ํžˆ๋ธŒ๋ฆฌ์–ด

ISO-8859-9

ISO88599

ํ„ฐํ‚ค์–ด

ISO-8859-15

ISO885915

๋ด๋งˆํฌ์–ด, ๋„ค๋œ๋ž€๋“œ์–ด, ์˜์–ด, ํ”„๋ž‘์Šค์–ด, ๋…์ผ์–ด, ์ดํƒˆ๋ฆฌ์•„์–ด, ๋…ธ๋ฅด์›จ์ด์–ด, ํฌ๋ฅดํˆฌ๊ฐˆ์–ด, ์Šค์›จ๋ด์–ด

์œ ๋กœํ™” ๊ธฐํ˜ธ๋ฅผ ํฌํ•จํ•˜์—ฌ, 8์ž๋ฅผ ์ œ์™ธํ•˜๋ฉด ISO-8859-1๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

KOI8-R

KOI8R

๋Ÿฌ์‹œ์•„์–ด

Shift_JIS

SHIFTJIS

์ผ๋ณธ์–ด

UTF-8

UTF8

๋ชจ๋“  ์–ธ์–ด

๊ตฌ๋ถ„๋œ ํŒŒ์ผ(CSV, TSV ๋“ฑ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ UTF-8์ด ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. . . ์ง€์›๋˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ํŒŒ์ผ ํ˜•์‹(JSON, Avro ๋“ฑ)์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•  ๋ฟ ์•„๋‹ˆ๋ผ ์–ธ๋กœ๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ UTF-8์ด ์œ ์ผํ•˜๊ฒŒ ์ง€์›๋˜๋Š” ๋ฌธ์ž ์„ธํŠธ์ž…๋‹ˆ๋‹ค.

UTF-16

UTF16

๋ชจ๋“  ์–ธ์–ด

UTF-16BE

UTF16BE

๋ชจ๋“  ์–ธ์–ด

UTF-16LE

UTF16LE

๋ชจ๋“  ์–ธ์–ด

UTF-32

UTF32

๋ชจ๋“  ์–ธ์–ด

UTF-32BE

UTF32BE

๋ชจ๋“  ์–ธ์–ด

UTF-32LE

UTF32LE

๋ชจ๋“  ์–ธ์–ด

windows-874

WINDOWS874

ํƒœ๊ตญ์–ด

windows-949

WINDOWS949

ํ•œ๊ตญ์–ด

windows-1250

WINDOWS1250

์ฒด์ฝ”์–ด, ํ—๊ฐ€๋ฆฌ์–ด, ํด๋ž€๋“œ์–ด, ๋ฃจ๋งˆ๋‹ˆ์•„์–ด

windows-1251

WINDOWS1251

๋Ÿฌ์‹œ์•„์–ด

windows-1252

WINDOWS1252

๋ด๋งˆํฌ์–ด, ๋„ค๋œ๋ž€๋“œ์–ด, ์˜์–ด, ํ”„๋ž‘์Šค์–ด, ๋…์ผ์–ด, ์ดํƒˆ๋ฆฌ์•„์–ด, ๋…ธ๋ฅด์›จ์ด์–ด, ํฌ๋ฅดํˆฌ๊ฐˆ์–ด, ์Šค์›จ๋ด์–ด

windows-1253

WINDOWS1253

๊ทธ๋ฆฌ์Šค์–ด

windows-1254

WINDOWS1254

ํ„ฐํ‚ค์–ด

windows-1255

WINDOWS1255

ํžˆ๋ธŒ๋ฆฌ์–ด

windows-1256

WINDOWS1256

์•„๋ž์–ด

๊ธฐ๋ณธ๊ฐ’:

UTF8

์ฐธ๊ณ 

Snowflake๋Š” ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ UTF-8 ๋ฌธ์ž ์„ธํŠธ์— ๋‚ด๋ถ€์ ์œผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ๋Š” UTF-8๋กœ ๋ณ€ํ™˜๋œ ํ›„ Snowflake์— ๋กœ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

TYPE = JSONยถ

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

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜„์žฌ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด(์ƒ์ˆ˜)์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์••์ถ•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์••์ถ•ํ•œ ๋ฐฉ์‹์„ ๊ฐ์ง€ํ•ด ๋กœ๋“œ๋ฅผ ์œ„ํ•ด ํŒŒ์ผ์˜ ์••์ถ• ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๊ฐ’

์ฐธ๊ณ 

AUTO

ํ˜„์žฌ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋Š” Brotli ์••์ถ• ํŒŒ์ผ์„ ์ œ์™ธํ•˜๊ณ  ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค. 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

MULTI_LINE = TRUE | FALSE

์—ฌ๋Ÿฌ ์ค„ ํ—ˆ์šฉ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

MULTI_LINE ์ด FALSE ๋กœ ์„ค์ •๋˜์–ด ์žˆ๊ณ  JSON ๋ ˆ์ฝ”๋“œ ๋‚ด์— ์ƒˆ ์ค„์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ์ค„์ด ํฌํ•จ๋œ ๋ ˆ์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

TRUE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )

SQL NULL๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์†Œ์Šค์˜ ์ด๋Ÿฌํ•œ ๋ฌธ์ž์—ด์„ SQL NULL๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋‘˜ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋ฌธ์ž์—ด ๋ชฉ๋ก์„ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Snowflake๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๊ด€๊ณ„์—†์ด ๊ฐ’์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ NULL๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 ๊ฐ€ ๊ฐ’์œผ๋กœ ์ง€์ •๋˜๋ฉด 2 ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌธ์ž์—ด ๋˜๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ:

NULL_IF = ('\N', 'NULL', 'NUL', '')

์ด ์˜ต์…˜์—๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

\\N (์ฆ‰, 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 ์ธ์ฝ”๋”ฉ ์˜ค๋ฅ˜๊ฐ€ ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ ์ƒ์„ฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” REPLACE_INVALID_CHARACTERS ์˜ ๋Œ€์ฒด ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

TRUE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ์‹œํ€€์Šค๊ฐ€ ์ „๋ถ€ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž U+FFFD (์ฆ‰, โ€œ๋Œ€์ฒด ๋ฌธ์žโ€)๋กœ ์ž๋™์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ๊ฐ์ง€๋  ๋•Œ ๋กœ๋”ฉ ์ž‘์—…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE

์ž…๋ ฅ ํŒŒ์ผ์— ์žˆ๋Š” ๋ชจ๋“  BOM(๋ฐ”์ดํŠธ ์ˆœ์„œ ํ‘œ์‹œ)์„ ๊ฑด๋„ˆ๋›ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. BOM์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๋ฐ”์ดํŠธ ์ˆœ์„œ์™€ ์ธ์ฝ”๋”ฉ ํ˜•์‹์„ ์ •์˜ํ•˜๋Š” ๋ฌธ์ž ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์žˆ๋Š” ๋ชจ๋“  BOM์„ ์ธ์‹ํ•˜๋ฏ€๋กœ, BOM์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ํ…Œ์ด๋ธ”์˜ ์ฒซ ๋ฒˆ์งธ ์—ด์— ๋ณ‘ํ•ฉ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

TRUE

TYPE = AVROยถ

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

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜„์žฌ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด(์ƒ์ˆ˜)์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์••์ถ•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์••์ถ•ํ•œ ๋ฐฉ์‹์„ ๊ฐ์ง€ํ•ด ๋กœ๋“œ๋ฅผ ์œ„ํ•ด ํŒŒ์ผ์˜ ์••์ถ• ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๊ฐ’

์ฐธ๊ณ 

AUTO

ํ˜„์žฌ ์ž๋™์œผ๋กœ ๊ฐ์ง€ํ•  ์ˆ˜ ์—†๋Š” Brotli ์••์ถ• ํŒŒ์ผ์„ ์ œ์™ธํ•˜๊ณ  ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค. Brotli ์••์ถ• ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜๋Š” ๊ฒฝ์šฐ AUTO ๋Œ€์‹  BROTLI ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

GZIP

BROTLI

ZSTD

DEFLATE

Deflate ์••์ถ• ํŒŒ์ผ(zlib ํ—ค๋” RFC1950 ํฌํ•จ).

RAW_DEFLATE

์›์‹œ Deflate ์••์ถ• ํŒŒ์ผ(ํ—ค๋” RFC1951 ์ œ์™ธ).

NONE

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์••์ถ•๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

AUTO.

์ฐธ๊ณ 

๊ธฐ๋ณธ AUTO ์˜ต์…˜์œผ๋กœ ํŒŒ์ผ ๋ฐ ์ฝ”๋ฑ ์••์ถ•์ด ๋ชจ๋‘ ๊ฒฐ์ •๋˜๋ฏ€๋กœ ๊ธฐ๋ณธ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์••์ถ• ์˜ต์…˜ ์ง€์ •์€ ๋ธ”๋ก(์ฝ”๋ฑ) ์••์ถ•์ด ์•„๋‹Œ ํŒŒ์ผ ์••์ถ•์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.

TRIM_SPACE = TRUE | FALSE

๋ฌธ์ž์—ด์—์„œ ์„ ํ–‰ ๊ณต๋ฐฑ๊ณผ ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ํ•„๋“œ๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ๊ณ  ์„ ํ–‰ ๊ณต๋ฐฑ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ Snowflake๋Š” ์ฒซ ๋”ฐ์˜ดํ‘œ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ์„ ํ–‰ ๊ณต๋ฐฑ์„ ํ•„๋“œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋”ฐ์˜ดํ‘œ๋Š” ํ•„๋“œ ๋ฐ์ดํ„ฐ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋กœ ํ•ด์„). ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘์— ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์ด ์˜ต์…˜์„ TRUE ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Avro ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE

์œ ํšจํ•˜์ง€ ์•Š์€ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž(๏ฟฝ)๋กœ ๋Œ€์ฒดํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ. ๋ณต์‚ฌ ์˜ต์…˜์€ ์ผ๋Œ€์ผ ๋ฌธ์ž ๋Œ€์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

TRUE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ๊ฐ์ง€๋  ๋•Œ ๋กœ๋”ฉ ์ž‘์—…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )

SQL NULL๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์†Œ์Šค์˜ ์ด๋Ÿฌํ•œ ๋ฌธ์ž์—ด์„ SQL NULL๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋‘˜ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋ฌธ์ž์—ด ๋ชฉ๋ก์„ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Avro ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Snowflake๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๊ด€๊ณ„์—†์ด ๊ฐ’์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ NULL๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 ๊ฐ€ ๊ฐ’์œผ๋กœ ์ง€์ •๋˜๋ฉด 2 ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌธ์ž์—ด ๋˜๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ:

NULL_IF = ('\N', 'NULL', 'NUL', '')

์ด ์˜ต์…˜์—๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

\\N (์ฆ‰, NULL)

TYPE = ORCยถ

TRIM_SPACE = TRUE | FALSE

๋ฌธ์ž์—ด์—์„œ ์„ ํ–‰ ๊ณต๋ฐฑ๊ณผ ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ํ•„๋“œ๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ๊ณ  ์„ ํ–‰ ๊ณต๋ฐฑ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ Snowflake๋Š” ์ฒซ ๋”ฐ์˜ดํ‘œ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ์„ ํ–‰ ๊ณต๋ฐฑ์„ ํ•„๋“œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋”ฐ์˜ดํ‘œ๋Š” ํ•„๋“œ ๋ฐ์ดํ„ฐ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋กœ ํ•ด์„). ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘์— ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์ด ์˜ต์…˜์„ TRUE ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Orc ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE

์œ ํšจํ•˜์ง€ ์•Š์€ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž(๏ฟฝ)๋กœ ๋Œ€์ฒดํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ. ๋ณต์‚ฌ ์˜ต์…˜์€ ์ผ๋Œ€์ผ ๋ฌธ์ž ๋Œ€์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

TRUE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ๊ฐ์ง€๋  ๋•Œ ๋กœ๋”ฉ ์ž‘์—…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )

SQL NULL๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์†Œ์Šค์˜ ์ด๋Ÿฌํ•œ ๋ฌธ์ž์—ด์„ SQL NULL๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋‘˜ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋ฌธ์ž์—ด ๋ชฉ๋ก์„ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Orc ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Snowflake๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๊ด€๊ณ„์—†์ด ๊ฐ’์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ NULL๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 ๊ฐ€ ๊ฐ’์œผ๋กœ ์ง€์ •๋˜๋ฉด 2 ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌธ์ž์—ด ๋˜๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ:

NULL_IF = ('\N', 'NULL', 'NUL', '')

์ด ์˜ต์…˜์—๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

\\N (์ฆ‰, NULL)

TYPE = PARQUETยถ

COMPRESSION = AUTO | SNAPPY | NONE

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ๋Œ€ํ•œ ํ˜„์žฌ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด(์ƒ์ˆ˜)์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด๋ฏธ ์••์ถ•๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์••์ถ•ํ•œ ๋ฐฉ์‹์„ ๊ฐ์ง€ํ•ด ๋กœ๋“œ๋ฅผ ์œ„ํ•ด ํŒŒ์ผ์˜ ์••์ถ• ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์›๋˜๋Š” ๊ฐ’

์ฐธ๊ณ 

AUTO

์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž๋™์œผ๋กœ ๊ฐ์ง€๋ฉ๋‹ˆ๋‹ค. Brotli, gzip, Lempel-Ziv-Oberhumer(LZO), LZ4, Snappy ๋˜๋Š” Zstandard v0.8 ์ด์ƒ์˜ ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

SNAPPY

NONE

๋กœ๋”ฉํ•  ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์••์ถ•๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

AUTO

BINARY_AS_TEXT = TRUE | FALSE

์ •์˜๋œ ๋…ผ๋ฆฌ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์—†๋Š” ์—ด์„ UTF-8 ํ…์ŠคํŠธ๋กœ ํ•ด์„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ์ด๋Ÿฌํ•œ ์—ด์„ ์ด์ง„ ๋ฐ์ดํ„ฐ๋กœ ํ•ด์„ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

TRUE

์ฐธ๊ณ 

์ž ์žฌ์ ์ธ ๋ณ€ํ™˜ ๋ฌธ์ œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋„๋ก BINARY_AS_TEXT๋ฅผ FALSE๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

TRIM_SPACE = TRUE | FALSE

๋ฌธ์ž์—ด์—์„œ ์„ ํ–‰ ๊ณต๋ฐฑ๊ณผ ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์†Œํ”„ํŠธ์›จ์–ด์—์„œ ํ•„๋“œ๋ฅผ ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ๊ณ  ์„ ํ–‰ ๊ณต๋ฐฑ์„ ์‚ฝ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ Snowflake๋Š” ์ฒซ ๋”ฐ์˜ดํ‘œ ๋ฌธ์ž๊ฐ€ ์•„๋‹Œ ์„ ํ–‰ ๊ณต๋ฐฑ์„ ํ•„๋“œ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์œผ๋กœ ์ฝ์Šต๋‹ˆ๋‹ค(์ฆ‰, ๋”ฐ์˜ดํ‘œ๋Š” ํ•„๋“œ ๋ฐ์ดํ„ฐ ๋ฌธ์ž์—ด์˜ ์ผ๋ถ€๋กœ ํ•ด์„). ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ค‘์— ๋ถˆํ•„์š”ํ•œ ๊ณต๋ฐฑ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ์ด ์˜ต์…˜์„ TRUE ๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Parquet ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

USE_LOGICAL_TYPE = TRUE | FALSE

Parquet ๋…ผ๋ฆฌ ์œ ํ˜•์„ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์œผ๋กœ ๋ฐ์ดํ„ฐ ๋กœ๋“œ ์ค‘์— Parquet ๋…ผ๋ฆฌ ์œ ํ˜•์„ ํ•ด์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Parquet ๋…ผ๋ฆฌ ์œ ํ˜• ์ •์˜ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. Parquet ๋…ผ๋ฆฌ ์œ ํ˜•์„ ํ™œ์„ฑํ™”ํ•˜๋ ค๋ฉด ์ƒˆ ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์„ ์ƒ์„ฑํ•  ๋•Œ USE_LOGICAL_TYPE์„ TRUE๋กœ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

USE_VECTORIZED_SCANNER = TRUE | FALSE

Parquet ํŒŒ์ผ์„ ๋กœ๋“œํ•  ๋•Œ ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’์€ FALSE ์ž…๋‹ˆ๋‹ค. ํ–ฅํ›„ BCR์—์„œ ๊ธฐ๋ณธ๊ฐ’์€ TRUE ์ž…๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์›Œํฌ๋กœ๋“œ์—๋Š” USE_VECTORIZED_SCANNER = TRUE ๋ฅผ ์„ค์ •ํ•˜๊ณ , ๊ธฐ์กด ์›Œํฌ๋กœ๋“œ์—๋Š” ํ…Œ์ŠคํŠธ ํ›„์— ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Parquet ํŒŒ์ผ์˜ ์—ด ํ˜•์‹์— ์ ํ•ฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— Parquet ํŒŒ์ผ ๋กœ๋”ฉ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํฌ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์Šค์บ๋„ˆ๋Š” ์„ ํƒํ•œ ์—ด์˜ ํ•˜์œ„ ์ง‘ํ•ฉ ๋“ฑ Parquet ํŒŒ์ผ์—์„œ ๊ด€๋ จ ์„น์…˜๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

USE_VECTORIZED_SCANNER ๊ฐ€ TRUE ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋™์ž‘์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

  • BINARY_AS_TEXT ์˜ต์…˜์€ ์‹ค์ œ ์„ค์ •๋œ ๊ฐ’์— ๊ด€๊ณ„์—†์ด ํ•ญ์ƒ FALSE ๋กœ, USE_LOGICAL_TYPE ์˜ต์…˜์€ ํ•ญ์ƒ TRUE ๋กœ ์ทจ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

  • ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ๋Š” Parquet ๋งต ์œ ํ˜•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ๋งต ์œ ํ˜• ์Šค์บ”์˜ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    "my_map":
      {
       "k1": "v1",
       "k2": "v2"
      }
    
    Copy
  • ๋‹ค์Œ ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ๋Š” ์ถœ๋ ฅ์— NULL ๊ฐ’์„ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    "person":
     {
      "name": "Adam",
      "nickname": null,
      "age": 34,
      "phone_numbers":
      [
        "1234567890",
        "0987654321",
        null,
        "6781234590"
      ]
      }
    
    Copy
  • ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ๋Š” ์‹œ๊ฐ„๊ณผ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    Parquet

    Snowflake ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ

    TimeType(isAdjustedToUtc=True/False, ๋‹จ์œ„=MILLIS/MICROS/NANOS)

    TIME

    TimestampType(isAdjustedToUtc=True, ๋‹จ์œ„=MILLIS/MICROS/NANOS)

    TIMESTAMP_LTZ

    TimestampType(isAdjustedToUtc=False, ๋‹จ์œ„=MILLIS/MICROS/NANOS)

    TIMESTAMP_NTZ

    INT96

    TIMESTAMP_LTZ

USE_VECTORIZED_SCANNER ๊ฐ€ FALSE ๋กœ ์„ค์ •๋œ ๊ฒฝ์šฐ ์Šค์บ๋„ˆ์˜ ๋™์ž‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์ด ์˜ต์…˜์€ Parquet ๋งต์„ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋งต ์œ ํ˜• ์Šค์บ”์˜ ์ถœ๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    "my_map":
     {
      "key_value":
      [
       {
              "key": "k1",
              "value": "v1"
          },
          {
              "key": "k2",
              "value": "v2"
          }
        ]
      }
    
    Copy
  • ๋‹ค์Œ ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด ์ด ์˜ต์…˜์€ ์Šค์บ” ์ถœ๋ ฅ์— NULL ๊ฐ’์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    "person":
     {
      "name": "Adam",
      "age": 34
      "phone_numbers":
      [
       "1234567890",
       "0987654321",
       "6781234590"
      ]
     }
    
    Copy
  • ์ด ์˜ต์…˜์€ ์‹œ๊ฐ„๊ณผ ํƒ€์ž„์Šคํƒฌํ”„๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    Parquet

    USE_LOGICAL_TYPE = TRUE์ธ ๊ฒฝ์šฐ

    USE_LOGICAL_TYPE = FALSE์ธ ๊ฒฝ์šฐ

    TimeType(isAdjustedToUtc=True/False, ๋‹จ์œ„=MILLIS/MICROS)

    TIME

    • TIME(ConvertedType์ด ์žˆ๋Š” ๊ฒฝ์šฐ)

    • INTEGER(ConvertedType์ด ์—†๋Š” ๊ฒฝ์šฐ)

    TimeType(isAdjustedToUtc=True/False, ๋‹จ์œ„=NANOS)

    TIME

    INTEGER

    TimestampType(isAdjustedToUtc=True, ๋‹จ์œ„=MILLIS/MICROS)

    TIMESTAMP_LTZ

    TIMESTAMP_NTZ

    TimestampType(isAdjustedToUtc=True, ๋‹จ์œ„=NANOS)

    TIMESTAMP_LTZ

    INTEGER

    TimestampType(isAdjustedToUtc=False, ๋‹จ์œ„=MILLIS/MICROS)

    TIMESTAMP_NTZ

    • TIMESTAMP_LTZ(ConvertedType์ด ์žˆ๋Š” ๊ฒฝ์šฐ)

    • INTEGER(ConvertedType์ด ์—†๋Š” ๊ฒฝ์šฐ)

    TimestampType(isAdjustedToUtc=False, ๋‹จ์œ„=NANOS)

    TIMESTAMP_NTZ

    INTEGER

    INT96

    TIMESTAMP_NTZ

    TIMESTAMP_NTZ

REPLACE_INVALID_CHARACTERS = TRUE | FALSE

์œ ํšจํ•˜์ง€ ์•Š์€ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž(๏ฟฝ)๋กœ ๋Œ€์ฒดํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ. ๋ณต์‚ฌ ์˜ต์…˜์€ ์ผ๋Œ€์ผ ๋ฌธ์ž ๋Œ€์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

TRUE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ๊ฐ์ง€๋  ๋•Œ ๋กœ๋”ฉ ์ž‘์—…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

NULL_IF = ( 'string1' [ , 'string2' , ... ] )

SQL NULL๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค. Snowflake๋Š” ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์†Œ์Šค์˜ ์ด๋Ÿฌํ•œ ๋ฌธ์ž์—ด์„ SQL NULL๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. ๋‘˜ ์ด์ƒ์˜ ๋ฌธ์ž์—ด์„ ์ง€์ •ํ•˜๋ ค๋ฉด ๋ฌธ์ž์—ด ๋ชฉ๋ก์„ ๊ด„ํ˜ธ๋กœ ๋ฌถ๊ณ  ์‰ผํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๊ฐ์˜ ๊ฐ’์„ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ Parquet ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ„๋„์˜ ์—ด์— ๋กœ๋”ฉํ•  ๋•Œ๋งŒ ๋‹ค์Œ ์ž‘์—…์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

Snowflake๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ๊ด€๊ณ„์—†์ด ๊ฐ’์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ NULL๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2 ๊ฐ€ ๊ฐ’์œผ๋กœ ์ง€์ •๋˜๋ฉด 2 ์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฌธ์ž์—ด ๋˜๋Š” ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์˜ˆ:

NULL_IF = ('\N', 'NULL', 'NUL', '')

์ด ์˜ต์…˜์—๋Š” ๋นˆ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

\N (์ฆ‰, 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 ์ธ์ฝ”๋”ฉ ์˜ค๋ฅ˜๊ฐ€ ์˜ค๋ฅ˜ ์กฐ๊ฑด์„ ์ƒ์„ฑํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” REPLACE_INVALID_CHARACTERS ์˜ ๋Œ€์ฒด ๊ตฌ๋ฌธ์ž…๋‹ˆ๋‹ค.

TRUE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ์‹œํ€€์Šค๊ฐ€ ์ „๋ถ€ ์œ ๋‹ˆ์ฝ”๋“œ ๋ฌธ์ž U+FFFD (์ฆ‰, โ€œ๋Œ€์ฒด ๋ฌธ์žโ€)๋กœ ์ž๋™์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ๊ฐ์ง€๋  ๋•Œ ๋กœ๋”ฉ ์ž‘์—…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

PRESERVE_SPACE = TRUE | FALSE

XML ํŒŒ์„œ๊ฐ€ ์š”์†Œ ์ฝ˜ํ…์ธ ์˜ ์„ ํ–‰ ๋ฐ ํ›„ํ–‰ ๊ณต๋ฐฑ์„ ๋ณด์กดํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

STRIP_OUTER_ELEMENT = TRUE | FALSE

XML ํŒŒ์„œ๊ฐ€ ์™ธ๋ถ€ XML ์š”์†Œ๋ฅผ ์ œ๊ฑฐํ•˜์—ฌ 2์ฐจ ์ˆ˜์ค€ ์š”์†Œ๋ฅผ ๋ณ„๊ฐœ์˜ ๋ฌธ์„œ๋กœ ๋…ธ์ถœํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

DISABLE_AUTO_CONVERT = TRUE | FALSE

XML ํŒŒ์„œ๊ฐ€ ์ˆซ์ž ๊ฐ’๊ณผ ๋ถ€์šธ ๊ฐ’์„ ํ…์ŠคํŠธ์—์„œ ๊ธฐ๋ณธ ํ‘œํ˜„์œผ๋กœ ์ž๋™ ๋ณ€ํ™˜ํ•˜์ง€ ๋ชปํ•˜๊ฒŒ ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

REPLACE_INVALID_CHARACTERS = TRUE | FALSE

์œ ํšจํ•˜์ง€ ์•Š์€ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž(๏ฟฝ)๋กœ ๋Œ€์ฒดํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ. ๋ณต์‚ฌ ์˜ต์…˜์€ ์ผ๋Œ€์ผ ๋ฌธ์ž ๋Œ€์ฒด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

TRUE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž๋ฅผ ์œ ๋‹ˆ์ฝ”๋“œ ๋Œ€์ฒด ๋ฌธ์ž๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด ์ž˜๋ชป๋œ UTF-8 ๋ฌธ์ž ์ธ์ฝ”๋”ฉ์ด ๊ฐ์ง€๋  ๋•Œ ๋กœ๋”ฉ ์ž‘์—…์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

FALSE

SKIP_BYTE_ORDER_MARK = TRUE | FALSE

์ž…๋ ฅ ํŒŒ์ผ์— ์žˆ๋Š” ๋ชจ๋“  BOM(๋ฐ”์ดํŠธ ์ˆœ์„œ ํ‘œ์‹œ)์„ ๊ฑด๋„ˆ๋›ธ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ถ€์šธ์ž…๋‹ˆ๋‹ค. BOM์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์—์„œ ๋ฐ”์ดํŠธ ์ˆœ์„œ์™€ ์ธ์ฝ”๋”ฉ ํ˜•์‹์„ ์ •์˜ํ•˜๋Š” ๋ฌธ์ž ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

FALSE ๋กœ ์„ค์ •ํ•˜๋ฉด Snowflake๊ฐ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์žˆ๋Š” ๋ชจ๋“  BOM์„ ์ธ์‹ํ•˜๋ฏ€๋กœ, BOM์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ํ…Œ์ด๋ธ”์˜ ์ฒซ ๋ฒˆ์งธ ์—ด์— ๋ณ‘ํ•ฉ๋˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

TRUE

๋ณต์‚ฌ ์˜ต์…˜(copyOptions)ยถ

๋‹ค์Œ ๋ณต์‚ฌ ์˜ต์…˜(๊ณต๋ฐฑ, ์‰ผํ‘œ ๋˜๋Š” ์ค„ ๋ฐ”๊ฟˆ์œผ๋กœ ๊ตฌ๋ถ„) ์ค‘ ํ•˜๋‚˜ ์ด์ƒ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ON_ERROR = CONTINUE | SKIP_FILE | SKIP_FILE_num | 'SKIP_FILE_num%' | ABORT_STATEMENT
์šฉ๋„:

๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์ „์šฉ

์ •์˜:

๋กœ๋”ฉ ์ž‘์—…์— ๋Œ€ํ•œ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด(์ƒ์ˆ˜)์ž…๋‹ˆ๋‹ค.

์ค‘์š”

ON_ERROR ๋ณต์‚ฌ ์˜ต์…˜ ๊ฐ’์„ ์‹ ์ค‘ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜์‹ญ์‹œ์˜ค. ๊ธฐ๋ณธ๊ฐ’์€ ์ผ๋ฐ˜์ ์ธ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ ์ ์ ˆํ•˜์ง€๋งŒ, ํ•ญ์ƒ ์ตœ์ƒ์˜ ์˜ต์…˜์ธ ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค.

๊ฐ’:
  • CONTINUE

    ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๊ฒฝ์šฐ ํŒŒ์ผ์„ ๊ณ„์† ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค. COPY ๋ฌธ์€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ๋‹น ์ตœ๋Œ€ ํ•˜๋‚˜์˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๊ฒฝ์šฐ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

    ROWS_PARSED ์—ด ๊ฐ’๊ณผ ROWS_LOADED ์—ด ๊ฐ’์˜ ์ฐจ๋Š” ๊ฒ€์ƒ‰๋œ ์˜ค๋ฅ˜๋ฅผ ํฌํ•จํ•˜๋Š” ํ–‰์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋“ค ํ–‰์˜ ๊ฐ๊ฐ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์˜ค๋ฅ˜๊ฐ€ ํฌํ•จ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๋ชจ๋“  ์˜ค๋ฅ˜๋ฅผ ๋ณด๋ ค๋ฉด VALIDATION_MODE ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ VALIDATE ํ•จ์ˆ˜๋ฅผ ์ฟผ๋ฆฌํ•˜์‹ญ์‹œ์˜ค.

  • SKIP_FILE

    ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋œ ๊ฒฝ์šฐ ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

    SKIP_FILE ์ž‘์—…์€ ์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ์ „์ฒด ํŒŒ์ผ์„ ๋ฒ„ํผ๋งํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ SKIP_FILE ์€ CONTINUE ๋˜๋Š” ABORT_STATEMENT ๋ณด๋‹ค ๋А๋ฆฝ๋‹ˆ๋‹ค. ์ ์€ ์ˆ˜์˜ ์˜ค๋ฅ˜๋กœ ์ธํ•ด ํฐ ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋›ฐ๋ฉด ์ง€์—ฐ์ด ๋ฐœ์ƒํ•˜๊ณ  ํฌ๋ ˆ๋”ง์ด ๋‚ญ๋น„๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋…ผ๋ฆฌ์  ์„ค๋ช…์ด ์—†๋Š” ํŒŒ์ผ์—์„œ ๋งŽ์€ ์ˆ˜์˜ ๋ ˆ์ฝ”๋“œ๋ฅผ ๋กœ๋”ฉํ•  ๋•Œ(์˜ˆ: ํŒŒ์ผ์ด ๋Œ€๋žต์ ์ธ ๊ฐ„๊ฒฉ์œผ๋กœ ์ž๋™ ์ƒ์„ฑ๋จ) ๋Œ€์‹  CONTINUE ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

    ์ถ”๊ฐ€ ํŒจํ„ด:

    SKIP_FILE_num (์˜ˆ: SKIP_FILE_10)

    ํŒŒ์ผ์—์„œ ๋ฐœ๊ฒฌ๋œ ์˜ค๋ฅ˜ ํ–‰ ์ˆ˜๊ฐ€ ์ง€์ •๋œ ์ˆ˜์™€ ๊ฐ™๊ฑฐ๋‚˜ ์ดˆ๊ณผํ•˜๋ฉด ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

    'SKIP_FILE_num%' (์˜ˆ: 'SKIP_FILE_10%')

    ํŒŒ์ผ์—์„œ ๋ฐœ๊ฒฌ๋œ ์˜ค๋ฅ˜ ํ–‰์˜ ๋ฐฑ๋ถ„์œจ์ด ์ง€์ •๋œ ๋ฐฑ๋ถ„์œจ์„ ์ดˆ๊ณผํ•˜๋ฉด ํŒŒ์ผ์„ ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

  • ABORT_STATEMENT

    ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ๊ฒฌ๋˜๋ฉด ๋กœ๋”ฉ ์ž‘์—…์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

    ๋กœ๋“œ ์ž‘์—…์€ FILES ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •๋œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ค‘๋‹จ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด (์˜ˆ์ปจ๋Œ€ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†๋Š” ๋“ฑ์˜ ์ด์œ ๋กœ) ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ์—๋Š” ๋กœ๋“œ ์ž‘์—…์ด ์ค‘๋‹จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

    ๋ฐ์ดํ„ฐ ํŒŒ์ผ์ด ์ˆ˜์ง‘๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ COPY_HISTORY ์— ์ค‘๋‹จ๋œ ์ž‘์—…์€ ํ‘œ์‹œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. QUERY_HISTORY ์—์„œ ์˜ค๋ฅ˜๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰ํ•ด ๋ณด๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:
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
์ •์˜:

๋ฐ์ดํ„ฐ์— ํ‘œ์‹œ๋œ ํ•ด๋‹น ์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ์—ด๋กœ ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.

์ค‘์š”

๋ชจ๋“  ๊ฒฝ์šฐ์— ๋กœ๋“œ ์ค‘ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜์„ ์œ„ํ•ด SELECT ๋ฌธ๊ณผ ํ•จ๊ป˜ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ์ด ๋‘ ์˜ต์…˜์€ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๊ณ  ํ•˜๋ฉด SQL compilation error: match_by_column_name is not supported with copy transform. ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ๋‹ค์Œ ๊ตฌ๋ฌธ์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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 ] } ) ]
MATCH_BY_COLUMN_NAME = CASE_SENSITIVE | CASE_INSENSITIVE | NONE
[ other copyOptions ]
Copy

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋กœ๋“œ ์ค‘ ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ํ•˜๊ธฐ ๋ฅผ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด ๋ณต์‚ฌ ์˜ต์…˜์€ ๋‹ค์Œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋Œ€ํ•ด ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • JSON

  • Avro

  • ORC

  • Parquet

  • CSV

์—ด์ด ์ผ์น˜ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๊ธฐ์ค€์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ์— ํ‘œ์‹œ๋œ ์—ด์˜ ์ด๋ฆ„์ด ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ์—ด์˜ ์ด๋ฆ„๊ณผ ์ •ํ™•ํžˆ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ณต์‚ฌ ์˜ต์…˜์€ ์—ด ์ด๋ฆ„์˜ ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์—ด ์ˆœ์„œ๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ…Œ์ด๋ธ”์˜ ์—ด์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ๋ฐ์ดํ„ฐ์— ํ‘œ์‹œ๋œ ์—ด์˜ ๊ฐ’๊ณผ ํ˜ธํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด, ์ˆซ์ž, ๋ถ€์šธ ๊ฐ’์„ ๋ชจ๋‘ ๋ฒ ๋ฆฌ์–ธํŠธ ์—ด์— ๋กœ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ’:
CASE_SENSITIVE | CASE_INSENSITIVE

๋ฐ์ดํ„ฐ์— ํ‘œ์‹œ๋œ ํ•ด๋‹น ์—ด๊ณผ ์ผ์น˜ํ•˜๋Š” ๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ์—ด๋กœ ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ์—ด ์ด๋ฆ„์€ ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ฑฐ๋‚˜(CASE_SENSITIVE) ๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(CASE_INSENSITIVE).

COPY ์ž‘์—…์€ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ์—ด์ด ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ํ‘œ์‹œ๋œ ์—ด๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์„ ์ฐพ์€ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ๊ฐ’์ด ์—ด์— ๋กœ๋”ฉ๋ฉ๋‹ˆ๋‹ค. ์ผ์น˜ํ•˜๋Š” ํ•ญ๋ชฉ์ด ์—†์œผ๋ฉด ํŒŒ์ผ์˜ ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ NULL ๊ฐ’ ์„ธํŠธ๊ฐ€ ํ…Œ์ด๋ธ”์— ๋กœ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

์ฐธ๊ณ 

  • ๋ฐ์ดํ„ฐ ํŒŒ์ผ์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์—ด์ด ์ถ”๊ฐ€๋กœ ์žˆ๋Š” ๊ฒฝ์šฐ ์ด๋Ÿฌํ•œ ์—ด์˜ ๊ฐ’์€ ๋กœ๋”ฉ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ ํ…Œ์ด๋ธ”์— ์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์—ด์ด ์ถ”๊ฐ€๋กœ ์žˆ๋Š” ๊ฒฝ์šฐ COPY ์ž‘์—…์€ ์ด๋Ÿฌํ•œ ์—ด์— NULL ๊ฐ’์„ ์‚ฝ์ž…ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์—ด์€ NULL ๊ฐ’์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

NONE

COPY ์ž‘์—…์—์„œ๋Š” ๋ฐ˜์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ๋ฒ ๋ฆฌ์–ธํŠธ ์—ด์— ๋กœ๋”ฉํ•˜๊ฑฐ๋‚˜, COPY ๋ฌธ์— ์ฟผ๋ฆฌ๊ฐ€ ํฌํ•จ๋œ ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ๊ฐ’:

NONE

์ฐธ๊ณ 

ํ˜„์žฌ๋Š” ๋‹ค์Œ ์ œํ•œ ์‚ฌํ•ญ์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

  • COPY ๋ฌธ์— MATCH_BY_COLUMN_NAME์„ VALIDATION_MODE ๋งค๊ฐœ ๋ณ€์ˆ˜์™€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ…Œ์ด์ง• ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์— ๋กœ๋”ฉํ•˜๋Š” ๋Œ€์‹  ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

  • Parquet ๋ฐ์ดํ„ฐ๋งŒ ํ•ด๋‹น. MATCH_BY_COLUMN_NAME์ด CASE_SENSITIVE ๋˜๋Š” CASE_INSENSITIVE ๋กœ ์„ค์ •๋˜์–ด ์žˆ์„ ๋•Œ๋Š” ์—ด ๊ฐ’์ด ๋น„์–ด ์žˆ๋Š” ๊ฒฝ์šฐ(์˜ˆ: "col1": "") ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

INCLUDE_METADATA = ( column_name = METADATA$field [ , column_name = METADATA$field ... ] )
์ •์˜:

๋Œ€์ƒ ํ…Œ์ด๋ธ”์˜ ๊ธฐ์กด ์—ด๊ณผ METADATA$ ์—ด ๊ฐ„์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๋งคํ•‘์ž…๋‹ˆ๋‹ค. ์ด ๋ณต์‚ฌ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. METADATA$field ์— ์œ ํšจํ•œ ์ž…๋ ฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • METADATA$FILENAME

  • METADATA$FILE_ROW_NUMBER

  • METADATA$FILE_CONTENT_KEY

  • METADATA$FILE_LAST_MODIFIED

  • METADATA$START_SCAN_TIME

๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์—ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ์— ๋Œ€ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ฟผ๋ฆฌํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ด ๋ณต์‚ฌ ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋งคํ•‘์„ ์ •์˜ํ•˜๋ฉด ๋‹ค์Œ ์˜ˆ์ œ์™€ ๊ฐ™์ด column_name ์—ด์ด ์ง€์ •๋œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ฐ’์œผ๋กœ ์ฑ„์›Œ์ง‘๋‹ˆ๋‹ค.

COPY INTO table1 FROM @stage1
MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE
INCLUDE_METADATA = (
    ingestdate = METADATA$START_SCAN_TIME, filename = METADATA$FILENAME);
Copy
+-----+-----------------------+---------------------------------+-----+
| ... | FILENAME              | INGESTDATE                      | ... |
|---------------------------------------------------------------+-----|
| ... | example_file.json.gz  | Thu, 22 Feb 2024 19:14:55 +0000 | ... |
+-----+-----------------------+---------------------------------+-----+
๊ธฐ๋ณธ๊ฐ’:

NULL

์ฐธ๊ณ 

  • INCLUDE_METADATA ๋Œ€์ƒ ์—ด ์ด๋ฆ„์€ ํ…Œ์ด๋ธ”์— ๋จผ์ € ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์ƒ ์—ด ์ด๋ฆ„์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ์ถ”๊ฐ€๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • INCLUDE_METADATA ์—ด์—๋Š” ๊ณ ์œ ํ•œ ์—ด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. INCLUDE_METADATA ๋Œ€์ƒ ์—ด์ด ๋ฐ์ดํ„ฐ ํŒŒ์ผ์˜ ์—ด๊ณผ ์ด๋ฆ„์ด ์ถฉ๋Œํ•˜๋Š” ๊ฒฝ์šฐ INCLUDE_METADATA ์—์„œ ์ •์˜ํ•œ METADATA$ ๊ฐ’์ด ์šฐ์„ ํ•ฉ๋‹ˆ๋‹ค.

  • CSV๋ฅผ INCLUDE_METADATA ๋กœ ๋กœ๋“œํ•  ๋•Œ๋Š” ํŒŒ์ผ ํ˜•์‹ ์˜ต์…˜ ERROR_ON_COLUMN_COUNT_MISMATCH ๋ฅผ FALSE ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

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

FILE_PROCESSOR = (SCANNER = custom_scanner_type SCANNER_OPTIONS = (scanner_options))
์ •์˜:

๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ์Šค์บ๋„ˆ์™€ ์Šค์บ๋„ˆ ์˜ต์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • SCANNER (ํ•„์ˆ˜): ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์— ์‚ฌ์šฉ๋˜๋Š” ์‚ฌ์šฉ์ž ์ง€์ • ์Šค์บ๋„ˆ์˜ ์œ ํ˜•์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ํ˜„์žฌ๋Š” document_ai ์‚ฌ์šฉ์ž ์ง€์ • ์Šค์บ๋„ˆ ์œ ํ˜•๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

  • SCANNER_OPTIONS: ์‚ฌ์šฉ์ž ์ง€์ • ์Šค์บ๋„ˆ ์œ ํ˜•์˜ ์†์„ฑ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, document_ai ๋ฅผ SCANNER ์˜ ์œ ํ˜•์œผ๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒฝ์šฐ document_ai ์˜ ์†์„ฑ์„ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. document_ai ์— ๋Œ€ํ•ด ๋ฏธ๋ฆฌ ์ •์˜๋œ ์†์„ฑ ์„ธํŠธ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    • project_name: Document AI ๋ชจ๋ธ์„ ์ƒ์„ฑํ•˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    • model_name (document_ai ์— ํ•„์ˆ˜): Document AI ๋ชจ๋ธ์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค.

    • model_version (document_ai ์— ํ•„์ˆ˜): Document AI ๋ชจ๋ธ์˜ ๋ฒ„์ „์ž…๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ Document AI๋กœ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ ๋กœ๋“œํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

์ฐธ๊ณ 

์ด ๋ณต์‚ฌ ์˜ต์…˜์€ MATCH_BY_COLUMN_NAME ์—์„œ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

LOAD_MODE = { FULL_INGEST | ADD_FILES_COPY }
์ •์˜:

Parquet ํŒŒ์ผ์—์„œ Snowflake๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” Iceberg ํ…Œ์ด๋ธ” ๋กœ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ ์‹œ ์‚ฌ์šฉํ•  ๋ชจ๋“œ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • FULL_INGEST: Snowflake๊ฐ€ ํŒŒ์ผ์„ ์Šค์บ”ํ•˜๊ณ  Iceberg ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ์œ„์น˜ ์•„๋ž˜์— Parquet ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์„ Iceberg ํ…Œ์ด๋ธ”์— ๋“ฑ๋กํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜ ๋ณ€ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์ด ์„ ํƒ ์‚ฌํ•ญ์„ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

  • ADD_FILES_COPY: Snowflake๋Š” ์›๋ณธ Parquet ํŒŒ์ผ์„ ์„œ๋ฒ„ ์ธก์—์„œ Iceberg ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธ ์œ„์น˜๋กœ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ํŒŒ์ผ์„ ํ…Œ์ด๋ธ”์— ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์›์‹œ Parquet ํŒŒ์ผ์„ ๋ฆฌ์ „ ๊ฐ„ ๋˜๋Š” ํด๋ผ์šฐ๋“œ ๊ฐ„์„ ๋„˜์–ด Iceberg ํ…Œ์ด๋ธ”๋กœ ์ˆ˜์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ฐธ๊ณ 

    ADD_FILES_COPY ์˜ต์…˜์€ ๋ณ€ํ™˜ ์—†์ด Iceberg ํ˜ธํ™˜ ์›์‹œ Parquet ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ์›์‹œ Iceberg ํ˜ธํ™˜ Parquet ํŒŒ์ผ์€ Iceberg ์นดํƒˆ๋กœ๊ทธ์— ๋“ฑ๋ก๋˜์–ด ์žˆ์ง€ ์•Š์ง€๋งŒ Iceberg ํ˜ธํ™˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

    ํŒŒ์ผ ์ฝ๊ธฐ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด ์ด ์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ €์žฅ์†Œ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๋ ค๋ฉด ์ด ์˜ต์…˜๊ณผ ํ•จ๊ป˜ PURGE = TRUE ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋”ฉ๋œ ํ›„ Snowflake๊ฐ€ ์›๋ž˜ ์œ„์น˜์—์„œ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ์ œ๊ฑฐํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

์ถ”๊ฐ€ ์‚ฌ์šฉ๋ฒ• ๋…ธํŠธ๋Š” LOAD_MODE ์‚ฌ์šฉ๋ฒ• ๋…ธํŠธ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ๋Š” Iceberg์™€ ํ˜ธํ™˜๋˜๋Š” Parquet ๋ฐ์ดํ„ฐ๋ฅผ Iceberg ํ…Œ์ด๋ธ”์— ๋กœ๋“œํ•˜๊ธฐ ์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

๊ธฐ๋ณธ๊ฐ’:

FULL_INGEST

์‚ฌ์šฉ๋ฒ• ๋…ธํŠธยถ

  • ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋Š” ์™„์ „ํžˆ ์ง€์›๋˜์ง€ ์•Š์œผ๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๋ฅผ ํฌํ•จํ•˜์—ฌ ์ผ๊ด€๋˜์ง€ ์•Š๊ฑฐ๋‚˜ ์˜ˆ๊ธฐ์น˜ ์•Š์€ ON_ERROR ๋™์ž‘์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    • SELECT ๋ฌธ์— DISTINCT ํ‚ค์›Œ๋“œ ์ง€์ •.

    • ํด๋Ÿฌ์Šคํ„ฐ๋œ ํ…Œ์ด๋ธ”๊ณผ ํ•จ๊ป˜ COPY ์‚ฌ์šฉ.

  • CSV ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•  ๋•Œ ์ŠคํŠธ๋ฆผ ๊ฐ€ ๋Œ€์ƒ ํ…Œ์ด๋ธ”์— ์žˆ๋Š” ๊ฒฝ์šฐ 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 |
    +---------------------------------------+------+----------------------------------+-------------------------------+
    
    Copy

    Google์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค๋ฅธ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  Google Cloud console ์—์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค ๋•Œ ์ด๋Ÿฌํ•œ 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 ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€ํ™˜์˜ ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

  • ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ํ…Œ์ด๋ธ” ๋กœ๋”ฉ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉํ•˜๊ธฐ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • LOAD_MODE ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Iceberg ํ˜ธํ™˜ Parquet ํŒŒ์ผ์—์„œ ๋กœ๋“œํ•˜๊ธฐ:

    • LOAD_MODE = ADD_FILES_COPY ์˜ต์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋‹ค์Œ ์ „์ œ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      • ๋Œ€์ƒ ํ…Œ์ด๋ธ”์€ ์†Œ์Šค Parquet ํŒŒ์ผ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ํ˜ธํ™˜๋˜๋Š” ์—ด ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ€์ง„ Snowflake ๊ด€๋ฆฌ Iceberg ํ…Œ์ด๋ธ”์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Apache Icebergโ„ข ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

      • ์†Œ์Šค ํŒŒ์ผ ํ˜•์‹์€ Iceberg ํ˜ธํ™˜ Parquet์ด์–ด์•ผ ํ•˜๋ฉฐ ๋ฒกํ„ฐํ™”๋œ ์Šค์บ๋„ˆ FILE_FORMAT = ( TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE) ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

      • MATCH_BY_COLUMN_NAME ์˜ต์…˜์„ CASE_SENSITIVE ๋กœ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    • ๋‹ค์Œ ์˜ต์…˜์€ LOAD_MODE = ADD_FILES_COPY ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

      • ํด๋ผ์šฐ๋“œ ์ €์žฅ์†Œ ์œ„์น˜๋ฅผ ์ง€์ •ํ•˜๊ณ  ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์ง€์ •ํ•˜์—ฌ ์Šคํ…Œ์ด์ง•๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      • FILE_FORMAT = ( TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE) ์ด์™ธ์˜ ๋ชจ๋“  ํŒŒ์ผ ํ˜•์‹ ๊ตฌ์„ฑ.

      • MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE | NONE.

      • ON_ERROR = CONTINUE | SKIP_FILE_N | SKIP_FILE_X%.

      • VALIDATION_MODE.

      • ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ ๋˜๋Š” ํ•„ํ„ฐ๋งํ•˜๊ธฐ. ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•˜๋ ค๋ฉด FULL_INGEST ์˜ต์…˜์„ ๋Œ€์‹  ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

      • Snowpipe๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉํ•˜๊ธฐ.

    • ADD_FILES_COPY ์˜ ๊ฒฝ์šฐ ๋” ํฐ ์›จ์–ดํ•˜์šฐ์Šค๋ฅผ ์‚ฌ์šฉํ•ด๋„ COPY ์ฟผ๋ฆฌ ๊ธฐ๊ฐ„์ด ํฌ๊ฒŒ ์ค„์–ด๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ COPY ์ž‘์—…์—์„œ๋Š” ํด๋ผ์šฐ๋“œ ์„œ๋น„์Šค ์ปดํ“จํŒ… ๋ฆฌ์†Œ์Šค๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€์—์„œ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด ์ €์žฅ์†Œ ํ†ตํ•ฉ์— ๋Œ€ํ•œ USAGE ๊ถŒํ•œ์ด ์žˆ๊ฑฐ๋‚˜ ์ด๋ฅผ ์ƒ์†๋ฐ›์€ ์—ญํ• ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์Šคํ…Œ์ด์ง€ ๊ถŒํ•œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • ์•„์›ƒ๋ฐ”์šด๋“œ ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ ์˜ ๊ฒฝ์šฐ ์™ธ๋ถ€ ์œ„์น˜(์™ธ๋ถ€ ์ €์žฅ์†Œ URI)์—์„œ ์ง์ ‘ ๋กœ๋”ฉํ•˜๋Š” ๊ธฐ๋Šฅ์€ ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์•„์›ƒ๋ฐ”์šด๋“œ ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ์„ ์œ„ํ•ด ๊ตฌ์„ฑ๋œ ์ €์žฅ์†Œ ํ†ตํ•ฉ์ด ์žˆ๋Š” ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

์ถœ๋ ฅยถ

์ด ๋ช…๋ น์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ด์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์—ด ์ด๋ฆ„

๋ฐ์ดํ„ฐ ํƒ€์ž…

์„ค๋ช…

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

ํ…Œ์ด๋ธ”์˜ ์Šคํ…Œ์ด์ง€์—์„œ ํ…Œ์ด๋ธ”๋กœ ํŒŒ์ผ ๋กœ๋”ฉ:

COPY INTO mytable
FILE_FORMAT = (TYPE = CSV);
Copy

์ฐธ๊ณ 

ํ…Œ์ด๋ธ” ์œ„์น˜์˜ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•  ๋•Œ, Snowflake๊ฐ€ ํ…Œ์ด๋ธ” ์œ„์น˜์— ์žˆ๋Š” ํŒŒ์ผ์„ ์ž๋™์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋ฏ€๋กœ FROM ์ ˆ์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์‚ฌ์šฉ์ž์˜ ๊ฐœ์ธ ์Šคํ…Œ์ด์ง€์—์„œ ํ…Œ์ด๋ธ”๋กœ ํŒŒ์ผ ๋กœ๋”ฉ:

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

๋ช…๋ช…๋œ ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€์—์„œ ํŒŒ์ผ ๋กœ๋”ฉํ•˜๊ธฐยถ

CREATE STAGE ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์ด์ „์— ๋งŒ๋“ค์–ด ๋ช…๋ช…ํ•œ ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€์—์„œ ํŒŒ์ผ์„ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค. ๋ช…๋ช…๋œ ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€๋Š” ์™ธ๋ถ€ ์œ„์น˜(Amazon S3, Google Cloud Storage ๋˜๋Š” Microsoft Azure)๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์ด ์œ„์น˜์— ์•ก์„ธ์Šคํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์ž๊ฒฉ ์ฆ๋ช…๊ณผ ๊ธฐํƒ€ ์„ธ๋ถ€ ์ •๋ณด๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

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

์—ด ์ผ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๋กœ๋”ฉํ•˜๊ธฐยถ

๋Œ€/์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ์˜ ์—ด ์ด๋ฆ„์„ ํ…Œ์ด๋ธ”์— ์ •์˜๋œ ์—ด ์ด๋ฆ„๊ณผ ์ผ์น˜์‹œ์ผœ MATCH_BY_COLUMN_NAME ๋ณต์‚ฌ ์˜ต์…˜์œผ๋กœ ๋ช…๋ช…๋œ ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€์—์„œ ํ…Œ์ด๋ธ”๋กœ ํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ต์…˜์—์„œ๋Š” ํŒŒ์ผ์˜ ์—ด ์ˆœ์„œ๊ฐ€ ํ…Œ์ด๋ธ”์˜ ์—ด ์ˆœ์„œ์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

COPY INTO mytable
  FROM @my_ext_stage/tutorials/dataloading/sales.json.gz
  FILE_FORMAT = (TYPE = 'JSON')
  MATCH_BY_COLUMN_NAME='CASE_INSENSITIVE';
Copy

์™ธ๋ถ€ ์œ„์น˜์—์„œ ์ง์ ‘ ํŒŒ์ผ ๋กœ๋”ฉํ•˜๊ธฐยถ

์ฐธ๊ณ 

์ด ์˜ต์…˜์€ ์•„์›ƒ๋ฐ”์šด๋“œ ๋น„๊ณต๊ฐœ ์—ฐ๊ฒฐ ์— ๋Œ€ํ•ด์„œ๋Š” ์ง€์›๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋Œ€์‹  ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.

๋‹ค์Œ ์˜ˆ์—์„œ๋Š” ๋ช…๋ช…๋œ my_csv_format ํŒŒ์ผ ํ˜•์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ €์žฅ์†Œ ์œ„์น˜(Amazon S3, Google Cloud Storage ๋˜๋Š” Microsoft Azure)์—์„œ data/files ์ ‘๋‘์‚ฌ๊ฐ€ ๋ถ™์€ ๋ชจ๋“  ํŒŒ์ผ์„ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

Amazon S3

์ด๋ฆ„์ด myint ์ธ ์ฐธ์กฐ๋œ ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๋œ S3 ๋ฒ„ํ‚ท์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์˜ˆ์ œ์—์„œ ๋ชจ๋‘ MASTER_KEY ๊ฐ’์ด ์ž˜๋ฆฐ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

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

์ œ๊ณต๋œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๋œ 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 = 'eSx...')
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Copy

Google Cloud Storage

์ด๋ฆ„์ด myint ์ธ ์ฐธ์กฐ๋œ ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๋œ GCS ๋ฒ„ํ‚ท์— ์•ก์„ธ์Šค:

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

Microsoft Azure

์ด๋ฆ„์ด myint ์ธ ์ฐธ์กฐ๋œ ์ €์žฅ์†Œ ํ†ตํ•ฉ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๋œ ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ๋‘ ์˜ˆ์ œ์—์„œ ๋ชจ๋‘ MASTER_KEY ๊ฐ’์ด ์ž˜๋ฆฐ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•˜์‹ญ์‹œ์˜ค.

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

์ œ๊ณต๋œ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฐธ์กฐ๋œ ์ปจํ…Œ์ด๋„ˆ์— ์•ก์„ธ์Šค:

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 = 'kPx...')
  FILE_FORMAT = (FORMAT_NAME = my_csv_format);
Copy

ํŒจํ„ด ์ผ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๋”ฉํ•˜๊ธฐยถ

์ž„์˜์˜ ๊ฒฝ๋กœ์—์„œ ์••์ถ•๋œ CSV ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋กœ๋”ฉํ•˜๊ธฐ ์œ„ํ•œ ํŒจํ„ด ์ผ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ”์˜ ์Šคํ…Œ์ด์ง€์—์„œ ํ…Œ์ด๋ธ”๋กœ ํŒŒ์ผ์„ ๋กœ๋”ฉํ•ฉ๋‹ˆ๋‹ค.

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

์—ฌ๊ธฐ์„œ .* ๋Š” โ€œ์ž„์˜์˜ ๋ฌธ์ž 0ํšŒ ๋˜๋Š” ๊ทธ ์ด์ƒ ๋ฐœ์ƒโ€์œผ๋กœ ํ•ด์„๋ฉ๋‹ˆ๋‹ค. ๋Œ€๊ด„ํ˜ธ๋Š” ํŒŒ์ผ ํ™•์žฅ๋ช… ์•ž์— ์žˆ๋Š” ๋งˆ์นจํ‘œ ๋ฌธ์ž(.)๋ฅผ ์ด์Šค์ผ€์ดํ”„ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฆ„์— ๋ฌธ์ž์—ด sales ๊ฐ€ ํฌํ•จ๋œ ์••์ถ•๋˜์ง€ ์•Š์€ CSV ํŒŒ์ผ๋งŒ ๋กœ๋”ฉํ•˜๋ ค๋ฉด ํŒจํ„ด ์ผ์น˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…Œ์ด๋ธ” ์Šคํ…Œ์ด์ง€์—์„œ ํ…Œ์ด๋ธ”๋กœ ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜์‹ญ์‹œ์˜ค.

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

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"
}]
Copy
/* 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

ํŒŒ์ผ ๋‹ค์‹œ ๋กœ๋”ฉํ•˜๊ธฐยถ

๋ณ€๊ฒฝ๋˜์ง€ ์•Š์€(์ฆ‰, ์ฒ˜์Œ ๋กœ๋”ฉ๋˜์—ˆ์„ ๋•Œ์™€ ๊ฐ™์€ ์ฒดํฌ์„ฌ์„ ๊ฐ€์ง„) ์Šคํ…Œ์ด์ง€ ์ƒํƒœ ๋ฐ์ดํ„ฐ ํŒŒ์ผ ์„ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋กœ๋”ฉ(๋ณต์ œ)ํ•˜๋ ค๋ฉด 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

๋กœ๋”ฉ ํ›„ ํŒŒ์ผ ์ œ๊ฑฐํ•˜๊ธฐยถ

ํ…Œ์ด๋ธ”์˜ ์Šคํ…Œ์ด์ง€์—์„œ ํ…Œ์ด๋ธ”๋กœ ํŒŒ์ผ์„ ๋กœ๋”ฉํ•˜๊ณ  ๋กœ๋”ฉ ํ›„ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ, COPY๋Š” ์ด ์œ„์น˜์—์„œ ๋กœ๋”ฉ๋œ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋กœ๋”ฉ ํ›„ ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋ ค๋ฉด ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜์‹ญ์‹œ์˜ค.

  • ๊ณ„์ •์— ํŒŒ์ผ์ด ์ €์žฅ๋œ ๋ฒ„ํ‚ท ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ๊ถŒํ•œ์ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

  • ๋กœ๋”ฉ ํ›„ ํ…Œ์ด๋ธ”์— ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋”ฉ๋œ ๋ชจ๋“  ํŒŒ์ผ์„ ์ œ๊ฑฐํ•˜๋„๋ก ์ง€์ •ํ•˜๋ ค๋ฉด ํ…Œ์ด๋ธ”์— ๋Œ€ํ•ด PURGE=TRUE ๋ฅผ ์„ค์ •ํ•˜์‹ญ์‹œ์˜ค.

    ALTER TABLE mytable SET STAGE_COPY_OPTIONS = (PURGE = TRUE);
    
    COPY INTO mytable;
    
    Copy
  • COPY ๋ช…๋ น์—์„œ ์ง์ ‘ ๋ณต์‚ฌ ์˜ต์…˜์„ ์žฌ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

    COPY INTO mytable PURGE = TRUE;
    
    Copy

ํŒŒ์ผ์ด ํ…Œ์ด๋ธ”์— ๋กœ๋”ฉ๋œ ํ›„์—๋Š” ํŒŒ์ผ์ด ์ €์žฅ๋œ ๋ฒ„ํ‚ท ๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ์—์„œ ํŒŒ์ผ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์ด ์‚ญ์ œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•œ ํ›„์—๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ทจ์†Œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์Šคํ…Œ์ด์ง•๋œ ํŒŒ์ผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐยถ

๋กœ๋”ฉํ•˜์ง€ ์•Š๊ณ  ์Šคํ…Œ์ด์ง€์—์„œ ํŒŒ์ผ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ:

  • ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ชจ๋“œ์—์„œ 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 ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์—์„œ๋Š” ์ฒ˜์Œ ์‹คํ–‰ํ•  ๋•Œ ์ง€์ •๋œ ํ–‰ ์ˆ˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์–ด ํ…Œ์ด๋ธ”์— ๋กœ๋”ฉ๋  ๋•Œ ๋‚˜ํƒ€๋‚  ์ •๋ณด๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ ์‹คํ–‰ํ•˜๋ฉด ์ง€์ •๋œ ํ–‰ ์ˆ˜์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‹ค์Œ ์˜ค๋ฅ˜์™€ ํ•จ๊ป˜ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค.

    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]
    
    Copy

Iceberg์™€ ํ˜ธํ™˜๋˜๋Š” Parquet ๋ฐ์ดํ„ฐ๋ฅผ Iceberg ํ…Œ์ด๋ธ”์— ๋กœ๋“œํ•˜๊ธฐยถ

์ด ์˜ˆ์ œ์—์„œ๋Š” Iceberg ํ…Œ์ด๋ธ”์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€์˜ Iceberg ํ˜ธํ™˜ Parquet ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋”ฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.

๋ฐ๋ชจ ๋ชฉ์ ์œผ๋กœ ์ด ์˜ˆ์ œ์—์„œ๋Š” ๋‹ค์Œ ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

  • iceberg_ingest_vol ์ด๋ผ๋Š” ์™ธ๋ถ€ ๋ณผ๋ฅจ. ์™ธ๋ถ€ ๋ณผ๋ฅจ์„ ์ƒ์„ฑํ•˜๋ ค๋ฉด ์™ธ๋ถ€ ๋ณผ๋ฅจ ๊ตฌ์„ฑ ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  • my_parquet_stage ๋ผ๋Š” ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€์— Iceberg์™€ ํ˜ธํ™˜๋˜๋Š” Parquet ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์™ธ๋ถ€ ์Šคํ…Œ์ด์ง€๋ฅผ ์ƒ์„ฑํ•˜๋ ค๋ฉด CREATE STAGE ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  1. Iceberg ํ˜ธํ™˜ Parquet ๋ฐ์ดํ„ฐ(TYPE = PARQUET USE_VECTORIZED_SCANNER = TRUE)๋ฅผ ๋ณต์‚ฌํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ…Œ์ด์ง•๋œ Parquet ํŒŒ์ผ์„ ์„ค๋ช…ํ•˜๋Š” ํŒŒ์ผ ํ˜•์‹ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    CREATE OR REPLACE FILE FORMAT my_parquet_format
      TYPE = PARQUET
      USE_VECTORIZED_SCANNER = TRUE;
    
    Copy
  2. ์›๋ณธ Parquet ํŒŒ์ผ ๋ฐ์ดํ„ฐ ํƒ€์ž…๊ณผ ํ˜ธํ™˜๋˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ์—ด์„ ์ •์˜ํ•˜์—ฌ Snowflake ๊ด€๋ฆฌํ˜• Iceberg ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    CREATE OR REPLACE ICEBERG TABLE customer_iceberg_ingest (
      c_custkey INTEGER,
      c_name STRING,
      c_address STRING,
      c_nationkey INTEGER,
      c_phone STRING,
      c_acctbal INTEGER,
      c_mktsegment STRING,
      c_comment STRING
    )
      CATALOG = 'SNOWFLAKE'
      EXTERNAL_VOLUME = 'iceberg_ingest_vol'
      BASE_LOCATION = 'customer_iceberg_ingest/';
    
    Copy

    ์ฐธ๊ณ 

    ์˜ˆ์ œ ๋ฌธ์€ Snowflake ๋ฐ์ดํ„ฐ ํƒ€์ž…์— ๋งคํ•‘๋˜๋Š” Iceberg ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ Apache Icebergโ„ข ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์„น์…˜์„ ์ฐธ์กฐํ•˜์‹ญ์‹œ์˜ค.

  3. COPY INTO ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์Šคํ…Œ์ด์ง•๋œ Parquet ํŒŒ์ผ(URL ๊ฒฝ๋กœ ๋ฐ”๋กœ ์•„๋ž˜์— ์œ„์น˜)์˜ ๋ฐ์ดํ„ฐ๋ฅผ Iceberg ํ…Œ์ด๋ธ”๋กœ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.

    COPY INTO customer_iceberg_ingest
      FROM @my_parquet_stage
      FILE_FORMAT = 'my_parquet_format'
      LOAD_MODE = ADD_FILES_COPY
      PURGE = TRUE
      MATCH_BY_COLUMN_NAME = CASE_SENSITIVE;
    
    Copy

    ์ฐธ๊ณ 

    ์ด ์˜ˆ์ œ์—์„œ๋Š” LOAD_MODE = ADD_FILES_COPY ๋ฅผ ์ง€์ •ํ•˜์—ฌ Snowflake๊ฐ€ ํŒŒ์ผ์„ ์™ธ๋ถ€ ๋ณผ๋ฅจ ์œ„์น˜์— ๋ณต์‚ฌ๋ณธ์œผ๋กœ ๋ณต์‚ฌํ•œ ๋‹ค์Œ ํŒŒ์ผ์„ ํ…Œ์ด๋ธ”์— ๋“ฑ๋กํ•˜๋„๋ก ์ง€์‹œํ•ฉ๋‹ˆ๋‹ค.

    ์ด ์„ ํƒ ์‚ฌํ•ญ์€ ์›๋ณธ Parquet ํŒŒ์ผ์„ ์Šค์บ”ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ Parquet ํŒŒ์ผ๋กœ ๋‹ค์‹œ ์ž‘์„ฑํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํŒŒ์ผ ์š”๊ธˆ์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    ์ถœ๋ ฅ:

    +---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
    | file                                                          | status | rows_parsed | rows_loaded | error_limit | errors_seen | first_error | first_error_line | first_error_character | first_error_column_name |
    |---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------|
    | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_008.parquet | LOADED |       15000 |       15000 |           0 |           0 | NULL        |             NULL |                  NULL | NULL                    |
    | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_006.parquet | LOADED |       15000 |       15000 |           0 |           0 | NULL        |             NULL |                  NULL | NULL                    |
    | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_005.parquet | LOADED |       15000 |       15000 |           0 |           0 | NULL        |             NULL |                  NULL | NULL                    |
    | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_002.parquet | LOADED |           5 |           5 |           0 |           0 | NULL        |             NULL |                  NULL | NULL                    |
    | my_parquet_stage/snow_af9mR2HShTY_AABspxOVwhc_0_1_010.parquet | LOADED |       15000 |       15000 |           0 |           0 | NULL        |             NULL |                  NULL | NULL                    |
    +---------------------------------------------------------------+--------+-------------+-------------+-------------+-------------+-------------+------------------+-----------------------+-------------------------+
    
  4. ํ…Œ์ด๋ธ”์„ ์ฟผ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

    SELECT
        c_custkey,
        c_name,
        c_mktsegment
      FROM customer_iceberg_ingest
      LIMIT 10;
    
    Copy

    ์ถœ๋ ฅ:

    +-----------+--------------------+--------------+
    | C_CUSTKEY | C_NAME             | C_MKTSEGMENT |
    |-----------+--------------------+--------------|
    |     75001 | Customer#000075001 | FURNITURE    |
    |     75002 | Customer#000075002 | FURNITURE    |
    |     75003 | Customer#000075003 | MACHINERY    |
    |     75004 | Customer#000075004 | AUTOMOBILE   |
    |     75005 | Customer#000075005 | FURNITURE    |
    |         1 | Customer#000000001 | BUILDING     |
    |         2 | Customer#000000002 | AUTOMOBILE   |
    |         3 | Customer#000000003 | AUTOMOBILE   |
    |         4 | Customer#000000004 | MACHINERY    |
    |         5 | Customer#000000005 | HOUSEHOLD    |
    +-----------+--------------------+--------------+