UNLOAD - Amazon Athena

UNLOAD

SELECT 문의 쿼리 결과를 지정된 데이터 형식으로 작성합니다. UNLOAD에 지원되는 형식에는 Apache Parquet, ORC, Apache Avro, JSON이 있습니다. CSV는 Athena SELECT 명령에서 지원하는 유일한 출력 형식이지만 다양한 출력 형식을 지원하는 UNLOAD 명령을 사용하여 SELECT 쿼리를 묶고 UNLOAD에서 지원하는 형식 중 하나로 출력을 다시 작성할 수 있습니다.

CTAS 문을 사용하여 CSV 외의 형식으로 데이터를 출력할 수 있지만 이러한 문은 Athena에서 테이블을 만들어야 합니다. UNLOAD 문은 SELECT 쿼리의 결과를 CSV 외의 형식으로 출력할 때 유용하지만 관련된 테이블을 요구하지 않습니다. 예를 들어 어떤 다운스트림 애플리케이션은 SELECT 쿼리 결과가 JSON 형식이 되도록 요구할 수 있고, 추가적인 분석을 위해 SELECT 쿼리의 결과를 사용하려는 경우 Parquet 또는 ORC가 CSV에 대해 성능상 이점을 제공할 수 있습니다.

고려 사항 및 제한

Athena에서 UNLOAD 문을 사용할 때는 다음 사항을 유의해야 합니다.

  • 파일의 전역 정렬 없음UNLOAD 결과는 여러 개의 파일에 병렬로 작성됩니다. UNLOAD 문의 SELECT 쿼리에 정렬 순서가 지정된 경우 각 파일의 내용은 순서대로 정렬되지만 파일들은 서로 간에 정렬되지 않습니다.

  • 분리된 데이터가 삭제되지 않음 - 실패 시 Athena는 분리된 데이터를 삭제하지 않습니다. 이 동작은 CTAS 및 INSERT INTO 문의 동작과 같습니다.

  • 최대 파티션 - UNLOAD에 사용할 수 있는 최대 파티션 수는 100개입니다.

  • 메타데이터 및 매니페스트 파일 - Athena는 각각의 UNLOAD 쿼리에 대해 메타데이터 파일 및 데이터 매니페스트 파일을 생성합니다. 매니페스트는 쿼리가 작성한 파일을 추적합니다. 두 파일은 모두 Amazon S3의 Athena 쿼리 결과 위치에 저장됩니다. 자세한 내용은 쿼리 출력 파일 식별 단원을 참조하세요.

  • 암호화UNLOAD 출력 파일은 Amazon S3에 사용되는 암호화 구성에 따라 암호화됩니다. UNLOAD 결과를 암호화하도록 암호화 구성을 설정하려면 EncryptionConfiguration API를 사용합니다.

  • 준비된 문UNLOAD는 준비된 문과 함께 사용할 수 있습니다. Athena의 준비된 문에 대한 자세한 내용은 파라미터화된 쿼리 사용 단원을 참조하세요.

  • 서비스 할당량 - UNLOAD는 DML 쿼리 할당량을 사용합니다. 할당량에 관한 자세한 내용은 Service Quotas 단원을 참조하세요.

  • 예상 버킷 소유자 – 예상 버킷 소유자 설정은 UNLOAD 쿼리에 지정된 대상 Amazon S3 위치에 적용되지 않습니다. 예상 버킷 소유자 설정은 Athena 쿼리 결과에 대해 지정한 Amazon S3 출력 위치에만 적용됩니다. 자세한 내용은 Athena 콘솔을 사용하여 쿼리 결과 위치 지정 단원을 참조하십시오.

구문

UNLOAD 문은 다음 구문을 사용합니다.

UNLOAD (SELECT col_name[, ...] FROM old_table) TO 's3://DOC-EXAMPLE-BUCKET/my_folder/' WITH ( property_name = 'expression' [, ...] )

파티션에 쓰는 경우를 제외하고, TO 대상에는 데이터가 없는 Amazon S3의 위치를 지정해야 합니다. UNLOAD 쿼리는 지정된 위치에 데이터를 쓰기 전에 버킷 위치가 비어 있는지 확인합니다. UNLOAD는 지정된 위치에 이미 데이터가 있는 경우 해당 위치에 데이터를 쓰지 않습니다. UNLOAD는 기존 데이터를 덮어쓰지 않습니다. 버킷 위치를 UNLOAD의 대상으로 재사용하려면 버킷 위치에서 데이터를 삭제한 다음 쿼리를 다시 실행합니다.

UNLOAD가 파티션에 쓸 때는 이 동작이 다르다는 점에 유의하세요. SELECT 문, TO 위치, 파티션이 동일한 같은 UNLOAD 쿼리를 여러 번 실행하는 경우 각 UNLOAD 쿼리는 지정된 위치와 파티션에 있는 Amazon S3로 데이터를 언로드합니다.

파라미터

property_name에 가능한 값은 다음과 같습니다.

format = 'file_format'

필수 사항입니다. 출력의 파일 형식을 지정합니다. file_format에 가능한 값은 ORC, PARQUET, AVRO, JSON, 또는 TEXTFILE입니다.

compression = 'compression_format'

선택 사항. 이 옵션은 ORC 및 Parquet 형식에만 특정합니다. ORC은 기본값이 zlib이고, Parquet는 기본값이 gzip입니다. 지원되는 압축 형식에 대한 자세한 내용은 Athena 압축 지원을 참조하세요.

참고

이 옵션은 AVRO 형식에 적용되지 않습니다. Athena는 JSONTEXTFILE 형식에 gzip를 사용합니다.

compression_level = compression_level

선택 사항입니다. ZSTD 압축에 사용할 압축 수준입니다. 이 속성은 ZSTD 압축에만 적용됩니다. 자세한 내용은 Athena에서 ZSTD 압축 수준 사용 단원을 참조하십시오.

field_delimiter = 'delimiter'

선택 사항입니다. CSV, TSV 및 기타 텍스트 형식에 대해 단일 문자의 필드 구분 기호를 지정합니다. 다음은 쉼표를 구분 기호로 지정한 예입니다.

WITH (field_delimiter = ',')

현재 여러 문자로 된 필드 구분 기호는 지원되지 않습니다. 필드 구분 기호를 지정하지 않으면 8진법 문자 \001(^A)이 사용됩니다.

partitioned_by = ARRAY[ col_name[,...] ]

선택 사항입니다. 출력을 분할하는 기준이 되는 열의 배열 목록입니다.

참고

SELECT 문에서 분할된 열의 이름이 문의 열 목록 마지막에 있는지 확인합니다.

예제

다음 예제는 SELECT 쿼리의 출력을 JSON 형식으로 Amazon S3 위치 s3://DOC-EXAMPLE-BUCKET/unload_test_1/에 작성합니다.

UNLOAD (SELECT * FROM old_table) TO 's3://DOC-EXAMPLE-BUCKET/unload_test_1/' WITH (format = 'JSON')

다음 예제는 SELECT 쿼리의 출력을, Snappy 압축을 사용해 Parquet 형식으로 작성합니다.

UNLOAD (SELECT * FROM old_table) TO 's3://DOC-EXAMPLE-BUCKET/' WITH (format = 'PARQUET',compression = 'SNAPPY')

다음 예제는 마지막 열을 기준으로 출력을 분할하여 네 개의 열을 텍스트 형식으로 작성합니다.

UNLOAD (SELECT name1, address1, comment1, key1 FROM table1) TO 's3://DOC-EXAMPLE-BUCKET/ partitioned/' WITH (format = 'TEXTFILE', partitioned_by = ARRAY['key1'])

다음 예제에서는 Parquet 파일 형식, ZSTD 압축 및 ZSTD 압축 수준 4를 사용하여 쿼리 결과를 지정된 위치로 언로드합니다.

UNLOAD (SELECT * FROM old_table) TO 's3://DOC-EXAMPLE-BUCKET/' WITH (format = 'PARQUET', compression = 'ZSTD', compression_level = 4)

추가적인 리소스