COPY FILES

한 스테이지에서 다른 스테이지로 파일을 복사합니다.

이 명령은 다음 표에 나와 있는 것처럼 명명된 스테이지 와의 사이에서 이루어지는 파일 복사 작업을 지원합니다.

원본 위치

대상 위치

명명된 내부 스테이지

명명된 내부 스테이지

외부 스테이지

명명된 내부 스테이지

명명된 내부 스테이지

외부 스테이지

외부 스테이지

외부 스테이지

대상 또는 원본 외부 스테이지는 다음 클라우드 저장소 서비스 또는 온프레미스 위치에 있는 파일을 참조할 수 있습니다.

  • Amazon S3

  • Google Cloud Storage

  • Microsoft Azure Blob 저장소

  • Microsoft Data Lake Storage Gen2

  • Microsoft Azure 범용 v2

  • Amazon S3 호환 저장소

참고 항목:

외부 스테이지 , 내부 스테이지

구문

COPY FILES INTO @[<namespace>.]<stage_name>[/<path>/]
  FROM @[<namespace>.]<stage_name>[/<path>/]
  [ FILES = ( '<file_name>' [ , '<file_name>' ] [ , ... ] ) ]
  [ PATTERN = '<regex_pattern>' ]
  [ DETAILED_OUTPUT = { TRUE | FALSE } ]
Copy

필수 매개 변수

INTO @[namespace.]stage_name[/path/]

복사된 파일의 대상 위치를 지정합니다.

FROM @[namespace.]stage_name[/path/]

복사할 파일이 스테이징되는 원본 위치를 지정합니다.

INTOFROM 매개 변수의 경우:

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

  • path 는 원본 스테이지 또는 대상 스테이지의 특정 위치에서 복사할 파일 세트를 지정하는 클라우드 저장소 위치에서 대/소문자를 구분하는 선택적 경로입니다. 클라우드 저장소 서비스에서는 경로를 접두사 또는 폴더 라고 부를 수도 있습니다.

    참고

    • 대상 또는 원본 경로 이름에 특수 문자나 공백이 포함된 경우 INTO ... 또는 FROM ... 값을 작은따옴표로 묶어야 합니다.

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

선택적 매개 변수

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

복사할 하나 이상의 쉼표로 구분된 파일 이름 목록을 지정합니다. 파일은 사용자가 명령에서 지정하는 원본 위치에 이미 스테이징되어 있어야 합니다. Snowflake는 찾을 수 없는 지정된 파일은 모두 건너뜁니다.

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

참고

외부 스테이지의 파일 경로를 설정하기 위해 Snowflake는 목록의 각 파일 이름 앞에 스테이지 정의의 URL을 추가합니다.

그러나 Snowflake는 경로와 파일 이름 사이에 구분 기호를 삽입하지 않습니다. 스테이지 정의에서 URL의 끝 부분이나 FILES 목록에 있는 각 파일 이름의 시작 부분에 구분 기호(/)를 명시적으로 포함해야 합니다.

PATTERN = 'regex_pattern'

복사할 파일 목록을 필터링하기 위한 정규식 패턴을 지정합니다. 이 명령은 정규식을 FROM 절의 전체 저장소 위치에 적용합니다.

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

DETAILED_OUTPUT = { TRUE | FALSE }

명령 출력이 복사 작업의 결과를 요약해야 하는지 아니면 복사된 각 파일을 나열해야 하는지 지정합니다.

:
  • TRUE 인 경우 출력에는 대상 위치에 복사된 각 파일에 대한 행이 포함됩니다. file 이라는 단일 열에는 복사된 각 파일의 대상 경로(해당되는 경우)와 파일 이름이 포함됩니다.

  • FALSE 인 경우 복사된 파일 수가 포함된 단일 행이 출력됩니다.

기본값:

TRUE

액세스 제어 요구 사항

이 SQL 명령을 실행하는 데 사용되는 역할 에는 (원본 위치와 대상 위치에 따라 다름) 최소한 다음 수준 이상의 권한 이 있어야 합니다.

권한

오브젝트

참고

USAGE

외부 스테이지

원본 또는 대상 외부 스테이지에 필요합니다.

READ

명명된 내부 스테이지

원본 내부 스테이지에 필요합니다.

WRITE

명명된 내부 스테이지

대상 내부 스테이지에 필요합니다.

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

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

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

사용법 노트

  • 이 명령은 다음 작업을 지원하지 않습니다.

    • 사용자 또는 테이블 스테이지 사이에서 파일을 복사하는 작업.

    • 복원이 필요한 아카이브 클라우드 저장소 클래스에 있는 데이터를 검색할 수 있도록 먼저 복사하는 작업. 아카이브 저장소 클래스로는 Amazon S3 Glacier Flexible Retrieval, Glacier Deep Archive 또는 Microsoft Azure Archive Storage가 있습니다.

    • 5GB보다 큰 파일을 복사하는 작업.

  • 이 명령 실행 시 고려 사항:

    • COPY FILES 문은 대상 위치에서 이름이 일치하는 모든 기존 파일을 덮어씁니다. 이 명령은 복사된 파일의 이름과 일치하지 않는 기존 파일을 제거하지 않습니다.

    • 파일 복사 작업이 실패하면 Snowflake는 자동 정리를 수행하지 않습니다.

    • Google Cloud Storage에서 파일 복사: 외부 스테이지의 오브젝트 목록에 하나 이상의 디렉터리 Blob이 포함된 경우 COPY FILES 문이 실패할 수 있습니다. 디렉터리 Blob은 슬래시 문자(/)로 끝나는 경로입니다. LIST @<stage> 에 대한 다음 예시 출력에서 my_gcs_stage/load/ 는 디렉터리 Blob입니다.

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

      Google Cloud Platform Console을 사용하여 디렉터리를 생성하는 경우 Google은 디렉터리 Blob을 생성합니다.

      이 문제를 방지하려면 PATTERN 옵션을 사용하여 복사할 파일을 지정하십시오. 예를 보려면 패턴 일치를 사용하여 파일 복사하기 를 참조하십시오.

  • COPY FILES 명령을 사용하면 데이터 전송 및 컴퓨팅 비용이 발생합니다.

    • 데이터 전송: 클라우드 공급자는 자체 네트워크 외부로 전송되는 데이터에 대해 요금을 청구할 수 있습니다. 이러한 비용을 회수하기 위해 Snowflake는 내부 Snowflake 스테이지에서 다른 리전 또는 다른 클라우드 공급자의 외부 스테이지로 파일을 복사할 때 바이트당 요금을 청구합니다. Snowflake는 데이터 수신에 대한 비용을 청구하지 않습니다(예: 외부 스테이지에서 내부 스테이지로 파일을 복사하는 경우).

      데이터 전송 요금에 대한 자세한 내용은 데이터 전송 비용 이해하기 을 참조하십시오.

    • 컴퓨팅: 파일 복사는 Snowflake 관리형 컴퓨팅 리소스에 의존합니다. Snowflake 청구서에서 COPY FILES 명령의 라인 항목에는 클라우드 서비스 요금이 포함되지 않습니다. 하지만 이 명령을 호출하면 Snowflake Consumption Table 에 자세히 설명된 대로 클라우드 서비스 요금이 부과될 수 있습니다.

      컴퓨팅 리소스 청구에 대한 자세한 내용은 컴퓨팅 비용 이해하기 섹션을 참조하십시오.

    참고

    Native Apps 및 워크시트와 같은 일부 Snowflake 기능을 사용하면 COPY FILES 요금이 부과됩니다. 결과적으로 COPY FILES 명령을 실행하지 않았더라도 COPY FILES 요금이 청구될 수 있습니다. 이러한 요금에 대한 자세한 내용은 Snowflake 지원 에 문의하십시오.

  • Snowflake는 이 명령에 대한 파일 복사 기록을 유지 관리하지 않습니다.

파일 복사하기

기존 스테이지(src_stage)의 모든 파일을 다른 스테이지(trg_stage)에 복사합니다.

COPY FILES
  INTO @trg_stage
  FROM @src_stage;
Copy

참고

보호된 저장소 위치가 있는 외부 스테이지와의 사이에서 파일을 복사하려면 스테이지 정의에 클라우드 저장소 위치에 액세스하기 위한 자격 증명이 포함되어 있는지 확인하십시오.

기존 스테이지(src_stage)에서 다른 스테이지(trg_stage)로 복사할 파일의 이름을 지정합니다.

COPY FILES
  INTO @trg_stage
  FROM @src_stage
  FILES = ('file1.csv', 'file2.csv');
Copy

기존 스테이지의 특정 경로(src_stage/src_path/)에서 다른 스테이지의 특정 경로(trg_stage/trg_path/)로 파일을 복사합니다.

COPY FILES
  INTO @trg_stage/trg_path/
  FROM @src_stage/src_path/;
Copy

패턴 일치를 사용하여 파일 복사하기

패턴 일치를 사용하여 기존 스테이지(src_stage)의 모든 경로에 있는 압축된 CSV 파일만 다른 스테이지(trg_stage)에 로드합니다.

COPY FILES
  INTO @trg_stage
  FROM @src_stage
  PATTERN='.*/.*/.*[.]csv[.]gz';
Copy

.* 구성 요소는 임의 문자의 0회 이상 발생을 나타냅니다. 대괄호는 파일 확장명 앞에 있는 마침표 문자(.)를 이스케이프합니다.

이름에 sales 문자열이 포함된 압축되지 않은 CSV 파일만 복사합니다.

COPY FILES
  INTO @trg_stage
  FROM @src_stage
  PATTERN='.*sales.*[.]csv';
Copy