Amazon S3에서 테이블 위치 - Amazon Athena

Amazon S3에서 테이블 위치

Athena에서 CREATE TABLE 쿼리를 실행할 때 AWS Glue 데이터 카탈로그에 테이블을 등록합니다. (Athena의 이전 내부 카탈로그를 사용하는 경우 AWS Glue 데이터 카탈로그로 업그레이드하는 것이 좋습니다.)

Amazon S3의 데이터에 대한 경로를 지정하려면 다음 예와 같이 LOCATION 속성을 사용합니다.

CREATE EXTERNAL TABLE `test_table`( ... ) ROW FORMAT ... STORED AS INPUTFORMAT ... OUTPUTFORMAT ... LOCATION s3://bucketname/folder/
  • 버킷 이름 지정에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서버킷 규제 및 제한을 참조하세요.

  • Amazon S3에서의 폴더 사용에 대한 자세한 내용은 Amazon Simple Storage Service 사용 설명서폴더 사용을 참조하세요.

Amazon S3의 LOCATION은 테이블을 나타내는 모든 파일을 지정합니다.

중요

Athena는 지정한 Amazon S3 폴더에 저장된 모든 데이터를 읽습니다. Athena가 읽지 않도록 할 데이터가 있는 경우 Athena가 읽어야 할 데이터가 있는 Amazon S3 폴더와 동일한 폴더에 해당 데이터를 저장하지 않아야 합니다. 파티셔닝을 활용하는 경우 Athena가 파티션 내의 데이터를 스캔하도록 하려면 WHERE 필터에 파티션을 포함해야 합니다. 자세한 정보는 테이블 위치 및 파티션을 참조하십시오.

LOCATION 문에서 CREATE TABLE을 지정하는 경우 다음 지침을 따르세요.

  • 후행 슬래시를 사용하세요.

  • Amazon S3 폴더 또는 Amazon S3 액세스 포인트 별칭에 대한 경로를 사용할 수 있습니다. Amazon S3 액세스 포인트 별칭에 대한 자세한 내용은 Amazon S3 사용 설명서액세스 포인트에 버킷 스타일 별칭 사용을 참조하세요.

다음 사용:

s3://bucketname/folder/
s3://access-point-name-metadata-s3alias/folder/

데이터에 대해 LOCATION을 지정하는 데 다음 항목을 사용하지 마세요.

  • 파일 위치를 지정할 때 파일 이름, 밑줄, 와일드카드 또는 glob 패턴을 사용하지 마세요.

  • Amazon S3 버킷 경로에 s3.amazon.com 등의 전체 HTTP 표기법을 추가하지 마세요.

  • //와 같이 경로에서 S3://bucketname/folder//folder/ 같은 빈 폴더를 사용하지 마세요. 유효한 Amazon S3 경로일 경우 Athena는 이를 허용하지 않으며 s3://bucketname/folder/folder/로 변경하고 여분의 /를 삭제합니다.

    다음 사용 안 함:

    s3://path_to_bucket s3://path_to_bucket/* s3://path_to_bucket/mySpecialFile.dat s3://bucketname/prefix/filename.csv s3://test-bucket.s3.amazon.com S3://bucket/prefix//prefix/ arn:aws:s3:::bucketname/prefix s3://arn:aws:s3:<region>:<account_id>:accesspoint/<accesspointname> https://<accesspointname>-<number>.s3-accesspoint.<region>.amazonaws.com

테이블 위치 및 파티션

원본 데이터는 열 집합을 기준으로 파티션이라는 Amazon S3 폴더에 그룹화될 수 있습니다. 예를 들어, 이러한 열은 특정 레코드가 생성된 연도, 월, 일을 나타낼 수 있습니다.

테이블을 생성할 때 테이블을 분할하도록 선택할 수 있습니다. Athena가 분할되지 않은 테이블에 대해 SQL 쿼리를 실행하면 테이블 정의의 LOCATION 속성을 기본 경로로 사용하여 나열하고 사용 가능한 모든 파일을 스캔합니다. 그러나 분할된 테이블을 쿼리하기 전에 먼저 파티션 정보로 AWS Glue 데이터 카탈로그를 업데이트해야 합니다. 이 정보는 특정 파티션 내의 파일 스키마와 해당 파티션의 Amazon S3에 있는 파일의 LOCATION을 나타냅니다.

Athena가 분할된 테이블에 대해 쿼리를 실행하는 경우 먼저 쿼리의 WHERE 절에 분할된 열이 사용되는지 확인합니다. 분할된 열이 사용되는 경우 Athena는 지정된 파티션 열과 일치하는 파티션 사양을 반환하도록 AWS Glue 데이터 카탈로그에 요청합니다. 파티션 사양에는 Athena가 데이터를 읽을 때 사용할 Amazon S3 접두사를 지정하는 LOCATION 속성이 포함되어 있습니다. 이 경우 이 접두사에 저장된 데이터 스캔됩니다. WHERE 절에서 분할된 열을 사용하지 않는 경우 Athena는 테이블의 파티션에 속한 모든 파일을 검색합니다.

Athena로 파티셔닝을 사용하여 쿼리 성능을 높이고 쿼리 비용을 줄이는 예제는 Amazon Athena를 위한 유용한 성능 튜닝 팁을 참조하세요.