COPY FILES¶
소스 스테이지에서 출력 스테이지로 파일을 복사본으로 옮깁니다. 기존 스테이지의 쿼리 또는 목록을 사용하여 복사본으로 사용할 파일 목록을 제공할 수 있습니다.
파일을 복사본으로 생성하려면 스테이지를 소스로 사용합니다.
이름을 바꾸지 않고 스테이지 사이를 이동할 수 있습니다.
스테이지 간 단일 패턴을 기반으로 한 파일 세트를 이름 변경 없이 스테이징할 수 있습니다.
하드코딩된 파일 이름 세트에서.
파일을 복사본으로 생성하려면 쿼리를 소스로 사용합니다.
쿼리(SELECT 문)로 정의된 파일 세트로부터 또는 파일로.
UDF (예: Snowpark Python UDF 및 UDTF에서 파일 쓰기)가 작성한 파일에서.
범위가 지정되거나 스테이지 URLs 에서.
이 명령은 다음 표에서 볼 수 있듯이 기존 명명된 스테이지 로의 파일 복사본 작업을 지원합니다.
원본 위치 |
대상 위치 |
---|---|
명명된 내부 스테이지 |
명명된 내부 스테이지 |
외부 스테이지 |
명명된 내부 스테이지 |
명명된 내부 스테이지 |
외부 스테이지 |
외부 스테이지 |
외부 스테이지 |
대상 또는 원본 외부 스테이지는 다음 클라우드 저장소 서비스 또는 온프레미스 위치에 있는 파일을 참조할 수 있습니다.
Amazon S3
Google Cloud Storage
Microsoft Azure Blob 저장소
Microsoft Data Lake Storage Gen2
Microsoft Azure 범용 v2
구문¶
스테이지에서 복사본 만들기
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 FILES INTO @[<namespace>.]<stage_name>[/<path>/]
FROM ( SELECT <existing_url> [ , <new_filename> ] FROM ... )
[ DETAILED_OUTPUT = { TRUE | FALSE } ]
필수 매개 변수¶
INTO @[namespace.]stage_name[/path/]
복사된 파일의 대상 위치를 지정합니다.
namespace
는database_name.schema_name
또는schema_name
형식의 내부 또는 외부 스테이지가 있는 데이터베이스 또는 스키마입니다. 데이터베이스와 스키마가 사용자 세션 내에서 현재 사용 중인 경우, 네임스페이스는 선택 사항 입니다. 그렇지 않은 경우, 필수입니다.path
는 원본 스테이지 또는 대상 스테이지의 특정 위치에서 복사할 파일 세트를 지정하는 클라우드 저장소 위치에서 대/소문자를 구분하는 선택적 경로입니다. 클라우드 저장소 서비스에서는 경로를 접두사 또는 폴더 라고 부를 수도 있습니다.
참고
대상 또는 소스 경로 이름에 특수 문자나 공백이 포함된 경우
INTO ...
값을 작은따옴표로 묶어야 합니다.INTO ...
값은 리터럴 상수여야 합니다. 값은 SQL 변수 일 수 없습니다.
스테이지를 소스로 사용¶
FROM @[namespace.]stage_name[/path/]
복사할 파일이 스테이징되는 원본 위치를 지정합니다.
FROM ...
에 제공된 값은INTO...
값과 동일한 사양 및 제약 조건을 따릅니다.
쿼리를 소스로 사용하기¶
FROM (SELECT existing_url [ , new_filename ] FROM ... )
복사본의 원본 위치 및 선택적 상대 출력 위치를 지정합니다. SELECT 쿼리에서 반환되는 각 행은 복사할 파일을 나타냅니다.
existing_url
은 범위가 지정된 URL, 스테이지 이름 또는 URL 스테이지일 수 있습니다.new_filename
은INTO
에 제공된 출력 스테이지의 상대 경로입니다. 그러면 결과 파일이 복사본으로 복사됩니다.@[<namespace>.]<stage_name>[/<path>]<new_filename>
new_filename
열이 제공되지 않으면existing_url
의 상대 경로가 사용됩니다.
선택적 매개 변수¶
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 콘솔을 사용하여 디렉터리를 생성하는 경우 Google은 디렉터리 Blob을 생성합니다.
이 문제를 방지하고 복사할 파일을 지정하려면
PATTERN
옵션(스테이지에서 복사본의 경우) 또는FROM
(쿼리에서 복사본의 경우)을 사용하십시오.예를 보려면 패턴 일치를 사용하여 파일 복사하기 를 참조하십시오.
COPY FILES 명령을 사용하면 데이터 전송 및 컴퓨팅 비용이 발생합니다.
데이터 전송: 클라우드 공급자는 자체 네트워크 외부로 전송되는 데이터에 대해 요금을 청구할 수 있습니다. 이러한 비용을 회수하기 위해 Snowflake는 내부 Snowflake 스테이지에서 다른 리전 또는 다른 클라우드 공급자의 외부 스테이지로 파일을 복사할 때 바이트당 요금을 청구합니다. Snowflake는 데이터 수신에 대한 비용을 청구하지 않습니다(예: 외부 스테이지에서 내부 스테이지로 파일을 복사하는 경우).
데이터 전송 요금에 대한 자세한 내용은 데이터 전송 비용 이해하기 을 참조하십시오.
계산: COPY FILES는 서버리스 기능으로, 가상 웨어하우스가 필요하지 않습니다. Snowflake 청구서에서 COPY FILES 명령의 라인 항목에는 클라우드 서비스 요금이 포함되지 않습니다.
컴퓨팅 리소스 청구에 대한 자세한 내용은 컴퓨팅 비용 이해하기 섹션을 참조하십시오.
참고
Native Apps 및 워크시트와 같은 일부 Snowflake 기능을 사용하면 COPY FILES 요금이 부과됩니다. 결과적으로 COPY FILES 명령을 실행하지 않았더라도 COPY FILES 요금이 청구될 수 있습니다. 이러한 요금에 대한 자세한 내용은 Snowflake 지원 에 문의하십시오.
Snowflake는 이 명령에 대한 파일 복사 기록을 유지 관리하지 않습니다.
예¶
파일 복사하기¶
기존 소스 스테이지(src_stage
)의 모든 파일을 기존 대상 스테이지(trg_stage
)로 복사합니다.
COPY FILES
INTO @trg_stage
FROM @src_stage;
참고
보호된 저장소 위치가 있는 외부 스테이지와의 사이에서 파일을 복사하려면 스테이지 정의에 클라우드 저장소 위치에 액세스하기 위한 자격 증명이 포함되어 있는지 확인하십시오.
기존 소스 스테이지(src_stage
)에서 기존 대상 스테이지(trg_stage
)로 복사할 파일 이름을 지정합니다.
COPY FILES
INTO @trg_stage
FROM @src_stage
FILES = ('file1.csv', 'file2.csv');
기존 스테이지의 특정 경로(src_stage/src_path/
)에서 기존 대상 스테이지의 특정 경로(trg_stage/trg_path/
)로 파일을 복사본으로 복사합니다.
COPY FILES
INTO @trg_stage/trg_path/
FROM @src_stage/src_path/;
패턴 일치를 사용하여 파일 복사하기¶
패턴 매칭을 사용하여 기존 소스 스테이지(src_stage
)의 경로에 있는 압축된 CSV 파일만 기존 대상 스테이지(trg_stage
)에 로드합니다.
COPY FILES
INTO @trg_stage
FROM @src_stage
PATTERN='.*/.*/.*[.]csv[.]gz';
.*
구성 요소는 임의 문자의 0회 이상 발생을 나타냅니다. 대괄호는 파일 확장명 앞에 있는 마침표 문자(.
)를 이스케이프합니다.
이름에 sales
라는 문자열이 포함된 압축되지 않은 CSV 파일만 복사본으로 만듭니다.
COPY FILES
INTO @trg_stage
FROM @src_stage
PATTERN='.*sales.*[.]csv';
쿼리로 정의된 파일 복사본 만들기¶
단일 파일 복사본 만들기¶
파일 이름은 소스 스테이지에서와 동일하게 유지됩니다.
COPY FILES
INTO @trg_stage
FROM (SELECT '@src_stage/file.txt');
단일 파일을 임의의 파일로 복사본 복사하기¶
COPY FILES
INTO @trg_stage
FROM (SELECT '@src_stage/file.txt', 'new_filename.txt');
테이블에서 파일 복사본 가져오기¶
일반 쿼리는 일반 처리를 위해 지원됩니다.
-- Create a table with URLs
CREATE TABLE urls(src_file STRING, trg_file STRING);
INSERT INTO urls VALUES ('@src_stage/file.txt', 'new_filename.txt');
-- Insert additional URLs here
COPY FILES
INTO @trg_stage
FROM (SELECT src_file, trg_file FROM urls);
일부 파일만 복사본 만들기¶
COPY FILES
INTO @trg_stage
FROM (SELECT src_file, trg_file FROM urls WHERE src_file LIKE '%file%');
디렉터리에서 파일 복사본 만들기¶
COPY FILES
INTO @trg_stage
FROM (SELECT relative_path FROM directory(@src_stage) WHERE relative_path LIKE '%.txt');