Amazon Athena에서 파티션된 테이블을 생성하고 사용하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Athena에서 파티션된 테이블을 만들고 쿼리를 개선하는 데 사용하고 싶습니다.

간략한 설명

Athena 테이블을 파티션하면 각 쿼리에서 스캔하는 데이터 양을 제한하여 성능을 향상시키고 비용을 절감할 수 있습니다. 파티션은 테이블을 여러 부분으로 나누고 열 값을 기준으로 관련 데이터를 함께 유지합니다. 파티션은 가상 열 역할을 하며 쿼리당 스캔되는 데이터의 양을 줄이는 데 도움이 됩니다.

테이블을 생성하고 데이터를 파티션할 때 다음 사항을 고려하세요.

  • Amazon Simple Storage Service(Amazon S3) 버킷에 데이터를 파티션으로 저장해야 합니다.
  • 테이블을 생성할 때 파티션 열과 파티션된 데이터의 루트 위치를 포함합니다.
  • 적절한 접근 방식을 선택하여 AWS Glue 데이터 카탈로그에 파티션을 로드합니다. 테이블은 쿼리를 실행할 때 데이터 카탈로그를 참조합니다.
  • Amazon S3의 고도로 파티션된 데이터에 대해 파티션 프로젝션을 사용합니다.

해결 방법

다음은 파티션이 있는 테이블을 만들 때 유의해야 할 몇 가지 사항입니다.

Amazon S3에 저장

데이터는 파티션되어 Amazon S3에 저장되어야 합니다. 파티션된 데이터는 다음 형식 중 하나일 수 있습니다.

  • Hive 스타일 형식(예: s3://doc-example-bucket/example-folder/year=2021/month=01/day=01/myfile.csv)
    참고: 경로에는 파티션 키의 이름과 해당 값이 포함됩니다(예: year=2021).
  • Hive 이외의 스타일 형식(예: s3://doc-example-bucket/example-folder/2021/01/01/myfile.csv)

테이블을 생성할 때 파티션 정보 포함

CREATE TABLE 문은 파티션 세부 정보를 포함해야 합니다. PARTITIONED BY를 사용하여 파티션 열을 정의하고 LOCATION을 사용하여 파티션된 데이터의 루트 위치를 지정합니다. 다음과 유사한 쿼리를 실행합니다.

CREATE EXTERNAL TABLE doc-example-table (
first string,
last string,
username string
)
PARTITIONED BY (year string, month string, day string)
STORED AS parquet
LOCATION 's3://doc-example-bucket/example-folder'

쿼리에서 다음을 바꿉니다.

  • doc-example-table을 생성하려는 테이블의 이름으로 바꿉니다.
  • doc-example-bucket을 테이블을 저장하는 S3 버킷의 이름으로 바꿉니다.
  • example-folder를 S3 폴더의 이름으로 바꿉니다.
  • first, lastusername을 열의 이름을 바꿉니다.
  • year, monthday를 파티션 열의 이름으로 바꿉니다.

사용 사례에 적합한 접근 방식으로 파티션을 데이터 카탈로그에 로드

테이블을 작성한 후 데이터 카탈로그에 파티션을 추가합니다. 다음 방법 중 하나를 사용하여 이 작업을 수행할 수 있습니다.

  • Hive 스타일 형식 데이터에 MSCK REPAIR TABLE 쿼리 사용: MSCK REPAIR TABLE 명령은 Amazon S3와 같은 파일 시스템에서 Hive 호환 파티션을 검색합니다. 이 명령은 이러한 파티션을 테이블에 이미 있는 파티션과 비교한 다음 새 파티션을 데이터 카탈로그에 추가합니다. 다음과 유사한 명령을 실행합니다.
    참고: 몇 천 개 이상의 파티션이 있는 경우 이 방법은 모범 사례가 아닙니다. DDL 쿼리에 시간 초과 문제가 발생할 수 있습니다. 자세한 내용은 MSCK REPAIR TABLE 쿼리가 AWS Glue 데이터 카탈로그에 파티션을 추가하지 않는 이유는 무엇입니까?를 참조하세요.
MSCK REPAIR TABLE doc-example-table
  • Hive 스타일 및 Hive 이외의 스타일 형식 데이터에 대해 ALTER TABLE ADD PARTITION 쿼리를 사용합니다. ALTER TABLE ADD PARTITION 명령은 하나 이상의 파티션을 데이터 카탈로그에 추가합니다. 명령에서 파티션 열 이름 및 값 페어를 해당 파티션의 데이터 파일이 저장되는 Amazon S3 경로와 함께 지정합니다. 다음과 유사한 명령을 실행하여 쿼리당 파티션 하나 또는 파티션 일괄 처리를 추가할 수 있습니다.
ALTER TABLE doc-example-table ADD PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
ALTER TABLE doc-example-table ADD
PARTITION (year='2021', month='01', day='01') LOCATION 's3://doc-example-bucket/example-folder/2021/01/01/'
PARTITION (year='2020', month='06', day='01') LOCATION 's3://doc-example-bucket/example-folder/2020/06/01/'
  • Hive 및 Hive 이외의 스타일 형식 데이터 모두에 AWS Glue 크롤러 사용: Glue 크롤러를 사용하여 데이터 집합에서 테이블 스키마를 자동으로 추론하고 테이블을 생성한 다음 데이터 카탈로그에 파티션을 추가할 수 있습니다. 또는 CREATE TABLE 문을 사용하여 수동으로 만든 테이블에 파티션을 추가할 경우에만 크롤러를 사용할 수 있습니다. 크롤러를 사용하여 파티션을 추가하려면 크롤러를 정의할 때 데이터 저장소를 지정하는 대신 하나 이상의 기존 데이터 카탈로그 테이블을 크롤러 소스로 지정합니다. 크롤러는 데이터 카탈로그 테이블에 지정된 데이터 저장소를 크롤링합니다. 새 테이블이 생성되지 않습니다. 대신 수동으로 만든 테이블이 업데이트되고 새 파티션이 추가됩니다. 자세한 내용은 크롤러 구성 옵션 설정을 참조하세요.
  • Amazon S3의 고도로 파티션된 데이터에 대해 파티션 프로젝션 사용: Amazon S3에 고도로 파티션된 데이터가 있는 경우 데이터 카탈로그에 파티션을 추가하는 것은 실용적이지 않고 시간이 많이 걸릴 수 있습니다. 고도로 파티션된 테이블에 대한 쿼리는 빠르게 완료되지 않습니다. 이러한 경우 파티션 프로젝션 기능을 사용하여 고도로 파티션된 테이블의 쿼리 처리 속도를 높이고 파티션 관리를 자동화할 수 있습니다. 파티션 프로젝션에서 파티션 값과 위치는 데이터 카탈로그와 같은 리포지토리에서 읽지 않고 구성에서 계산됩니다. 즉, 파티션 프로젝션을 사용하여 데이터 카탈로그에 파티션을 추가할 필요가 없습니다. 메모리 내 작업은 일반적으로 원격 작업보다 빠르기 때문에 파티션 프로젝션은 고도로 파티션된 테이블에 대한 쿼리 런타임을 줄일 수 있습니다. 파티션 프로젝션 기능은 현재 열거 값, 정수, 날짜 또는 삽입된 파티션 열 유형과 함께 작동합니다. 자세한 내용은 Amazon Athena와 파티션 프로젝션을 참조하세요.

관련 정보

Amazon Athena 테이블을 쿼리할 때 반환되는 레코드가 없는 이유는 무엇인가요?

AWS 공식
AWS 공식업데이트됨 3년 전