정의된 파티션이 있는 Amazon Athena에서 테이블을 생성했지만, 테이블을 쿼리하면 0개의 레코드가 반환됩니다.

최종 업데이트 날짜: 2020년 4월 7일

Amazon Athena에서 예상되는 열과 데이터 유형으로 CREATE TABLE 문을 실행했습니다. SELECT* FROM table-name 쿼리를 실행하면 "0개의 레코드가 반환됩니다"가 출력됩니다.

해결 방법

다음은 쿼리가 반환하는 레코드가 0개인 것에 대한 몇 가지 일반적인 이유입니다.

크롤러 설정에서 선택한 파일

크롤러를 사용하는 경우 크롤러가 파일이 아니라 Amazon Simple Storage Service(Amazon S3) 버킷을 가리키는지 확인하십시오.

잘못된 LOCATION 경로

입력된 데이터의 Amazon S3 LOCATION 경로를 확인합니다. 입력된 LOCATION 경로가 잘못된 경우 Athena는 0개의 레코드를 반환합니다.

LOCATION 경로의 이중 슬래시

Athena는 이중 슬래시(//)가 포함된 테이블 위치 경로를 지원하지 않습니다. 예를 들어 다음 LOCATION 경로는 빈 결과를 반환합니다.

s3://awsexamplebucket/myprefix//input//

이 문제를 해결하려면 파일을 이중 슬래시가 없는 위치에 복사합니다. AWS 명령줄 인터페이스(AWS CLI) 명령 예제:

aws s3 cp s3://awsexamplebucket/myprefix//input// s3://awsexamplebucket/myprefix/input/ --recursive

아직 로드되지 않은 파티션

Athena는 테이블이 생성될 때만 메타데이터를 생성합니다. 데이터는 쿼리를 실행할 때만 구문 분석됩니다. 테이블에 정의된 파티션이 있으면, 파티션이 아직 AWS Glue 데이터 카탈로그 또는 내부 Athena 데이터 카탈로그에 로드되지 않았을 수 있습니다. MSCK REPAIR TABLE 또는 ALTER TABLE ADD PARTITION 을 사용하여 파티션 정보를 카탈로그에 로드합니다.

MSCK REPAIR TABLE

파티션이 Athena가 지원하는 형식으로 저장되었으면 MSCK REPAIR TABLE을 실행해 파티션의 메타데이터를 카탈로그에 로드하십시오. 예를 들어, 연도에 파티션된 테이블이 있으면 Athena는 다음과 같은 Amazon S3 경로에서 데이터를 찾을 것으로 예상합니다.

  • s3://awsexamplebucket/athena/inputdata/year = 2020/data.csv
  • s3://awsexamplebucket/athena/inputdata/year = 2019/data.csv
  • s3://awsexamplebucket/athena/inputdata/year = 2018/data.csv

Athena가 예상하는 Amazon S3 경로에 데이터가 있으면 다음과 같은 명령을 실행해 테이블을 복구하십시오.

CREATE EXTERNAL TABLE Employee (
    Id INT,
    Name STRING,
    Address STRING
) PARTITIONED BY (year INT)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://awsexamplebucket/athena/inputdata/';

테이블이 생성된 후 파티션 정보를 로드합니다.

MSCK REPAIR TABLE Employee;

데이터가 로드된 후 SELECT* FROM table-name 쿼리를 다시 실행합니다.

ALTER TABLE ADD PARTITION

파티션이 Athena가 지원하는 형식으로 저장되지 않거나 다른 Amazon S3 경로에 있으면 각 파티션에 대해 ALTER TABLE ADD PARTITION을 실행하십시오. 예를 들어, 데이터가 다음과 같은 Amazon S3 경로에 있다고 가정하겠습니다.

  • s3://awsexamplebucket/athena/inputdata/2020/data.csv
  • s3://awsexamplebucket/athena/inputdata/2019/data.csv
  • s3://awsexamplebucket/athena/inputdata/2018/data.csv

이러한 경로가 주어지면 다음과 같은 명령을 실행합니다.

ALTER TABLE Employee ADD
    PARTITION (year=2020) LOCATION 's3://awsexamplebucket/athena/inputdata/2020/'
    PARTITION (year=2019) LOCATION 's3://awsexamplebucket/athena/inputdata/2019/'
    PARTITION (year=2018) LOCATION 's3://awsexamplebucket/athena/inputdata/2018/'

데이터가 로드된 후 SELECT* FROM table-name 쿼리를 다시 실행합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?