Amazon S3로 데이터 언로드 - Amazon Redshift

Amazon S3로 데이터 언로드

Amazon Redshift는 데이터를 병렬 방식으로 쉽게 다시 로드할 수 있도록 select 문의 결과를 다수의 파일, 즉 노드 조각당 1개 이상의 파일로 분할합니다. 또는 PARALLEL OFF 옵션을 추가하여 UNLOAD가 결과를 1개 이상의 파일에 직렬 방식으로 작성하도록 지정할 수도 있습니다. Amazon S3의 파일 크기는 MAXFILESIZE 파라미터를 지정하여 제한할 수 있습니다. UNLOAD는 Amazon S3 서버 측 암호화(SSE-S3)를 사용하여 데이터 파일을 자동으로 암호화합니다.

Amazon Redshift에서 지원되는 UNLOAD 명령에서는 모든 select 문을 사용할 수 있습니다. 단, 바깥쪽 select에서 LIMIT 절을 사용하는 SELECT는 예외입니다. 예를 들어 특정 열을 추가하거나, 혹은 WHERE 절을 사용하여 다수의 테이블을 조인하는 SELECT 문을 사용할 수 있습니다. 쿼리에 인용 부호(리터럴 값을 묶는 등)가 포함되어 있으면 쿼리 텍스트에서 이스케이프 처리해야 합니다(\'). 자세한 내용은 SELECT&; Command Reference를 참조하십시오. LIMIT 절의 사용에 대한 자세한 내용은 UNLOAD 명령의 사용 노트 섹션을 참조하세요.

예를 들어 다음 UNLOAD 명령은 VENUE 테이블의 내용을 Amazon S3 버킷인 s3://mybucket/tickit/unload/로 전송합니다.

unload ('select * from venue') to 's3://mybucket/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

위 예에서 생성한 파일 이름에는 접두사 'venue_'가 추가됩니다.

venue_0000_part_00 venue_0001_part_00 venue_0002_part_00 venue_0003_part_00

기본적으로 UNLOAD는 클러스터의 조각 수에 따라 다수의 파일에 병렬 방식으로 데이터를 작성합니다. 데이터를 단일 파일에 작성할 때는 PARALLEL OFF를 지정하십시오. 그러면 UNLOAD가 데이터를 직렬 방식으로 작성하여 절대적으로 ORDER BY 절(사용하는 경우)에 따라 정렬됩니다. 데이터 파일의 최대 크기는 6.2GB입니다. 데이터 크기가 최대 파일 크기보다 크면 UNLOAD가 각각 6.2GB까지 파일을 추가로 생성합니다.

다음은 VENUE의 내용을 단일 파일로 작성하는 예입니다. 파일 크기가 6.2GB보다 작기 때문에 파일이 하나만 필요합니다.

unload ('select * from venue') to 's3://mybucket/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off;
참고

UNLOAD 명령은 병렬 처리를 사용하도록 설계되었습니다. 따라서 대부분 경우, 특히 COPY 명령에서 파일을 사용하여 테이블을 로드한다면 PARALLEL을 활성화하는 것이 좋습니다.

VENUE 테이블의 전체 데이터 크기가 5GB라고 가정했을 때 다음 예에서는 VENUE의 데이터를 각각 100MB씩 50개 파일로 작성합니다.

unload ('select * from venue') to 's3://mybucket/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' parallel off maxfilesize 100 mb;

이때 접두사를 Amazon S3 경로 문자열에 추가하면 UNLOAD가 파일 이름에 접두사를 사용합니다.

unload ('select * from venue') to 's3://mybucket/tickit/unload/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

UNLOAD 명령에서 MANIFEST 옵션을 지정하면 언로드 파일이 나열되는 매니페스트 파일을 생성할 수 있습니다. 매니페스트란 Amazon S3에 작성한 개별 파일의 URL을 명시적으로 나열한 JSON 형식의 텍스트 파일을 말합니다.

다음은 MANIFEST 옵션을 추가하는 예입니다.

unload ('select * from venue') to 's3://mybucket/tickit/venue_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest;

다음은 언로드 파일이 4개인 매니페스트 예입니다.

{ "entries": [ {"url":"s3://mybucket/tickit/venue_0000_part_00"}, {"url":"s3://mybucket/tickit/venue_0001_part_00"}, {"url":"s3://mybucket/tickit/venue_0002_part_00"}, {"url":"s3://mybucket/tickit/venue_0003_part_00"} ] }

COPY에서 MANIFEST 옵션을 지정하면 동일한 파일을 로드하는 데 매니페스트 파일을 사용할 수도 있습니다. 자세한 내용은 섹션을 참조하세요매니페스트를 사용하여 데이터 파일 지정

UNLOAD 작업을 마치면 UNLOAD가 파일을 작성한 Amazon S3 버킷으로 이동하여 데이터가 정확하게 언로드되었는지 확인합니다. 조각마다 0부터 시작하여 번호가 매겨진 파일이 다수 표시됩니다. MANIFEST 옵션을 지정하였다면 여기에서 'manifest'로 끝나는 파일도 볼 수 있습니다. 예:

mybucket/tickit/venue_0000_part_00 mybucket/tickit/venue_0001_part_00 mybucket/tickit/venue_0002_part_00 mybucket/tickit/venue_0003_part_00 mybucket/tickit/venue_manifest

UNLOAD가 완료된 후 Amazon S3 목록 작업을 호출하여 Amazon S3에 기록된 파일 목록을 프로그래밍 방식으로 가져올 수 있습니다. STL_UNLOAD_LOG를 쿼리할 수도 있습니다.

다음은 UNLOAD에서 생성된 파일의 경로 이름을 반환하는 쿼리입니다. PG_LAST_QUERY_ID 함수는 가장 최근 쿼리를 반환합니다.

select query, substring(path,0,40) as path from stl_unload_log where query=2320 order by path; query | path -------+-------------------------------------- 2320 | s3://my-bucket/venue0000_part_00 2320 | s3://my-bucket/venue0001_part_00 2320 | s3://my-bucket/venue0002_part_00 2320 | s3://my-bucket/venue0003_part_00 (4 rows)

데이터 용량이 너무 크면 Amazon Redshift가 각 조각마다 여러 부분으로 파일을 분할할 수도 있습니다. 예:

venue_0000_part_00 venue_0000_part_01 venue_0000_part_02 venue_0001_part_00 venue_0001_part_01 venue_0001_part_02 ...

다음은 select 문에 인용 부호로 묶인 문자열이 포함되어 인용 부호가 이스케이프 처리(=\'OH\' ')되는 UNLOAD 명령입니다.

unload ('select venuename, venuecity from venue where venuestate=\'OH\' ') to 's3://mybucket/tickit/venue/ ' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

기본적으로 UNLOAD는 대상 버킷의 기존 파일을 덮어쓰지 않고 중단됩니다. 매니페스트 파일을 포함하여 기존 파일을 덮어쓰려면 ALLOWOVERWRITE 옵션을 지정합니다.

unload ('select * from venue') to 's3://mybucket/venue_pipe_' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' manifest allowoverwrite;