COPY 명령을 사용하여 Amazon S3에서 로드 - Amazon Redshift

COPY 명령을 사용하여 Amazon S3에서 로드

COPY 명령을 사용하여 Amazon S3의 데이터 파일에서 병렬로 테이블을 로드합니다. Amazon S3 객체 접두사를 사용하거나 매니페스트 파일을 사용하여 로드할 파일을 지정할 수 있습니다.

접두사를 사용하여 로드할 파일을 지정하는 구문은 다음과 같습니다.

COPY <table_name> FROM 's3://<bucket_name>/<object_prefix>' authorization;

매니페스트 파일은 로드할 데이터 파일을 나열하는 JSON 형식 파일입니다. 매니페스트 파일을 사용하여 로드할 파일을 지정하는 구문은 다음과 같습니다.

COPY <table_name> FROM 's3://<bucket_name>/<manifest_file>' authorization MANIFEST;

로드할 테이블이 데이터베이스에 이미 존재하고 있어야 합니다. 테이블 생성에 대한 자세한 내용은 SQL 참조의 CREATE TABLE 섹션을 참조하세요.

authorization 값은 Amazon Redshift가 Amazon S3 객체에 액세스하는 데 필요한 AWS 권한 부여를 제공합니다. 필요한 권한에 대한 자세한 내용은 COPY, UNLOAD 및 CREATE LIBRARY 작업을 위한 IAM 권한 섹션을 참조하세요. 선호되는 인증 방법은 IAM_ROLE 파라미터를 지정하고 IAM 역할의 Amazon 리소스 이름(ARN)에 필요한 권한을 제공하는 것입니다. 자세한 정보는 역할 기반 액세스 제어을 참조하십시오.

IAM_ROLE 파라미터를 사용하여 인증하려면 다음 구문을 참조하여 <aws-account-id><role-name>을 바꿉니다.

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

다음 예는 IAM 역할을 사용한 인증을 보여 줍니다.

COPY customer FROM 's3://amzn-s3-demo-bucket/mydata' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

기타 옵션에 대한 자세한 내용은 권한 부여 파라미터 섹션을 참조하세요.

실제로 테이블을 로드하지 않고 데이터를 확인하려면 COPY 명령과 함께 NOLOAD 옵션을 사용하십시오.

다음 예는 venue.txt라는 이름의 파일에서 파이프로 구분된 데이터의 첫 몇 행을 보여 줍니다.

1|Toyota Park|Bridgeview|IL|0 2|Columbus Crew Stadium|Columbus|OH|0 3|RFK Stadium|Washington|DC|0

파일을 Amazon S3에 업로드하기 전에 COPY 명령이 병렬 처리를 사용해 로드할 수 있도록 파일을 여러 파일로 분할합니다. 이때 파일 수는 클러스터 조각 수의 승수가 되어야 합니다. 이때는 압축 후 파일 크기가 1MB~1GB로 거의 같아질 수 있도록 로딩 데이터 파일을 분할합니다. 자세한 내용은 압축 및 비압축 파일에서 데이터 로드 단원을 참조하십시오.

예를 들어 venue.txt 파일은 다음과 같이 4개의 파일로 분할할 수 있습니다.

venue.txt.1 venue.txt.2 venue.txt.3 venue.txt.4

다음 COPY 명령은 Amazon S3 버킷 amzn-s3-demo-bucket에서 접두사 'venue'가 있는 데이터 파일에서 파이프로 구분된 데이터를 사용해 VENUE 테이블을 로드합니다.

참고

다음 예의 Amazon S3 버킷 amzn-s3-demo-bucket은 존재하지 않습니다. 기존 Amazon S3 버킷의 실제 데이터를 사용하는 샘플 COPY 명령은 샘플 데이터 로드 섹션을 참조하세요.

COPY venue FROM 's3://amzn-s3-demo-bucket/venue' IAM_ROLE 'arn:aws:iam::0123456789012:role/MyRedshiftRole' DELIMITER '|';

키 접두사 'venue'가 있는 Amazon S3 객체가 존재하지 않는 경우 로드가 실패합니다.