Athena의 문제 해결 - Amazon Athena

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

Athena의 문제 해결

Athena 팀은 고객이 제기한 문제로부터 다음과 같은 문제 해결 정보를 수집했습니다. 종합적이지는 않지만 일반적인 성능, 시간 초과, 메모리 부족 문제에 대한 조언이 포함되어 있습니다.

CREATE TABLE AS SELECT(CTAS)

Duplicated data occurs with concurrent CTAS statements

Athena는 CTAS에 대한 동시 검증을 관리하지 않습니다. 동시에 같은 위치에 대해 실행되는 중복된 CTAS 문이 있는지 확인하세요. CTAS 또는 INSERT INTO 문이 실패하더라도 분리된(orphaned) 데이터가 해당 문에 지정된 데이터 위치에 남아있을 수 있습니다.

HIVE_TOO_MANY_OPEN_PARTITIONS

CTAS 문을 사용하여 파티션이 100개 이상인 테이블을 만들면 “HIVE_TOO_MANY_OPEN_PARTITIONS: 파티션/버킷에 대해 열린 작성자 100개를 초과했습니다” 오류가 발생할 수 있습니다. 이러한 제한은 CTAS 문(최대 100개의 파티션 생성) 및 일련의 INSERT INTO 문(각각 최대 100개의 파티션 삽입)을 사용하여 해결할 수 있습니다. 자세한 내용은 CTAS 및 INSERT INTO를 사용하여 100개 파티션 한도 해결 섹션을 참조하세요.

데이터 파일 문제

Athena cannot read hidden files

Athena는 밑줄(_) 또는 점(.)으로 시작하는 소스 파일을 숨김으로 처리합니다. 이 제한을 해결하려면 파일 이름을 바꿉니다.

Athena reads files that I excluded from the AWS Glue crawler

Athena는 사용자가 AWS Glue 크롤러에 지정하는 제외 패턴을 인식하지 못합니다. 예를 들어 .csv.json 파일이 모두 포함된 Amazon S3 버킷이 있는데 .json 파일을 크롤러에서 제외한다면 Athena는 두 파일 그룹을 모두 쿼리합니다. 이 문제를 방지하려면 제외할 파일을 다른 위치에 배치하면 됩니다.

HIVE_BAD_DATA: Error parsing field value

다음과 같은 상황에서 이 오류가 발생할 수 있습니다.

HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://bucket-name

이 오류는 많은 수의 객체가 있는 Amazon S3 버킷 접두사를 쿼리할 때 발생할 수 있습니다. 자세한 내용은 AWS 지식 센터의 Athena에서 "HIVE_CANNOT_OPEN_SPLIT: Error opening Hive split s3://awsdoc-example-bucket/: Slow Down" 오류를 해결하려면 어떻게 해야 하나요?를 참조하세요.

HIVE_CURSOR_ERROR: com.amazonaws.services.s3.model.AmazonS3Exception: The specified key does not exist

이 오류는 일반적으로 쿼리 실행 중에 파일이 제거되었을 때 발생합니다. 쿼리를 다시 실행하거나, 워크플로를 조사하여 쿼리 실행 중에 다른 작업 또는 프로세스가 파일을 수정하고 있는지에 확인합니다.

HIVE_CURSOR_ERROR: Unexpected end of input stream

이 메시지는 파일이 손상되었거나 비어 있음을 나타냅니다. 파일의 무결성을 확인하고 쿼리를 다시 실행합니다.

HIVE_FILESYSTEM_ERROR: 파일에 대한 잘못된 파일 크기 1234567

이 메시지는 쿼리 계획과 쿼리 실행 간에 파일이 변경되었을 때 발생할 수 있습니다. 일반적으로 Amazon S3 파일이 현재 위치에서 교체될 때 발생합니다. 예를 들어, PUT은 객체가 이미 존재하는 키에서 수행됩니다. Athena는 쿼리가 실행 중일 때 파일의 내용을 삭제하거나 바꾸는 것을 지원하지 않습니다. 이 오류를 방지하려면 쿼리가 실행되지 않을 때 파일을 덮어쓰거나 삭제하는 작업을 예약하거나 새 파일이나 파티션에만 데이터를 씁니다.

HIVE_UNKNOWN_ERROR: Unable to create input format

이 오류는 다음과 같은 문제로 인해 발생할 수 있습니다.

  • AWS Glue Crawler가 데이터 형식을 분류할 수 없는 경우

  • 특정 AWS Glue 테이블 정의 속성이 비어 있는 경우

  • Athena가 Amazon S3에 있는 파일의 데이터 형식을 지원하지 않는 경우

자세한 내용은 AWS 지식 센터의 Athena에서 “입력 형식을 생성할 수 없음” 오류를 해결하려면 어떻게 해야 합니까?를 참조하거나 지식 센터 동영상을 시청하세요.

쿼리 결과를 저장하기 위해 제공된 S3 위치가 잘못되었습니다.

쿼리 결과에 대해 유효한 S3 위치를 지정했는지 확인합니다. 자세한 내용은 쿼리 결과 위치 지정 주제에서 쿼리 결과, 최근 쿼리, 출력 파일 작업 단원을 참조하세요.

Linux Foundation Delta Lake 테이블

Delta Lake 테이블 스키마가 동기화되지 않음

AWS Glue에 오래된 스키마가 있는 Delta Lake 테이블을 쿼리하면 다음과 같은 오류 메시지가 나타날 수 있습니다.

INVALID_GLUE_SCHEMA: Delta Lake table schema in Glue does not match the most recent schema of the Delta Lake transaction log. Please ensure that you have the correct schema defined in Glue.

스키마를 Athena에 추가한 후 AWS Glue에서 수정하면 스키마가 오래될 수 있습니다. 스키마를 업데이트하려면 다음 단계 중 하나를 수행하세요.

페더레이션 쿼리

ListTableMetadata 호출 중 제한 시간 초과

데이터 소스에 테이블이 많거나 데이터 소스가 느리거나 네트워크 속도가 느린 경우 ListTableMetadata API 호출 제한 시간이 초과될 수 있습니다. 이 문제를 해결하려면 다음 단계를 시도합니다.

  • 테이블 수 확인 - 테이블이 1,000개가 넘으면 테이블 수를 줄여봅니다. 가장 빠른 ListTableMetadata 응답을 얻으려면 카탈로그당 테이블 수를 1,000개 미만으로 줄이는 것이 좋습니다.

  • Lambda 구성 확인 - Lambda 함수 동작을 모니터링하는 것은 중요합니다. 페더레이션된 카탈로그를 사용하는 경우 Lambda 함수의 실행 로그를 검토해야 합니다. 결과에 따라 메모리와 제한 시간 값을 적절히 조정합니다. 제한 시간과 관련된 잠재적 문제를 식별하려면 Lambda 구성을 다시 확인합니다. 자세한 내용은 AWS Lambda 개발자 안내서Lambda 함수 시간 제한 구성(콘솔)을 참조하세요.

  • 페더레이션된 데이터 소스 로그 확인 - 페더레이션된 데이터 소스의 로그와 오류 메시지를 검사하여 문제나 오류가 있는지 확인합니다. 로그는 제한 시간 초과의 원인에 대한 소중한 인사이트를 제공할 수 있습니다.

  • StartQueryExecution을 사용하여 메타데이터 가져오기 – 테이블이 1,000개가 넘는 경우 페더레이션 커넥터를 사용하여 메타데이터를 검색하는 데 예상보다 오래 걸릴 수 있습니다. StartQueryExecution의 비동기적 특성으로 인해 Athena는 가장 최적의 방식으로 쿼리를 실행하므로 ListTableMetadata 대신 StartQueryExecution을 사용하는 것이 좋습니다. 다음 AWS CLI 예제에서는 ListTableMetadata 대신 StartQueryExecution을 사용하여 데이터 카탈로그에 있는 테이블의 모든 메타데이터를 가져오는 방법을 보여줍니다.

    먼저 다음 예제와 같이 모든 테이블을 가져오는 쿼리를 실행합니다.

    aws athena start-query-execution --region us-east-1 \ --query-string "SELECT table_name FROM information_schema.tables LIMIT 50" \ --work-group "your-work-group-name"

    그 다음으로, 다음 예제와 같이 개별 테이블의 메타데이터를 검색합니다.

    aws athena start-query-execution --region us-east-1 \ --query-string "SELECT * FROM information_schema.columns \ WHERE table_name = 'your-table-name' AND \ table_catalog = 'your-catalog-name'" \ --work-group "your-work-group-name"

    결과를 얻는 데 걸리는 시간은 카탈로그의 테이블 수에 따라 다릅니다.

페더레이션된 쿼리 문제 해결에 대한 자세한 내용은 GitHub의 awslabs/aws-athena-query-federation 섹션에서 Common_Problems를 참조하거나 개별 Athena 데이터 소스 커넥터에 대한 설명서를 참조하세요.

NULL or incorrect data errors when trying to read JSON data

JSON 데이터를 읽으려고 할 때 NULL 또는 잘못된 데이터 오류는 여러 가지 원인으로 인해 발생할 수 있습니다. OpenX SerDe를 사용할 때 오류를 일으키는 행을 파악하려면 ignore.malformed.jsontrue로 설정합니다. 잘못된 형식의 레코드는 NULL로 반환됩니다. 자세한 내용은 AWS 지식 센터의 Amazon Athena에서 JSON 데이터를 읽으려고 할 때 오류가 발생하는 이유는 무엇입니까?를 참조하거나 지식 센터 동영상을 시청하세요.

HIVE_BAD_DATA: field 0의 필드 값을 구문 분석하는 중 오류 발생: java.lang.String을org.openx.data.jsonserde.json.JSONObject로 캐스팅할 수 없음

Athena 쿼리에서 열을 구문 분석하지 못할 때 OpenX JSON SerDe에서 이 오류가 발생합니다. 이러한 상황은 map 또는 struct로 열을 정의했는 데 기초 데이터가 실제로 string, int 또는 기본 형식일 경우에 발생할 수 있습니다.

HIVE_CURSOR_ERROR: Row is not a valid JSON object - JSONException: Duplicate key

이 오류는 Athena를 사용하여 서로 다른 경우에 동일한 이름의 여러 태그를 사용하는 AWS Config 리소스를 쿼리할 때 발생합니다. 해결 방법은 WITH SERDEPROPERTIES 'case.insensitive'='false'를 사용하여 CREATE TABLE을 실행하고 이름을 매핑하는 것입니다. case.insensitive 및 매핑에 대한 자세한 내용은 JSON SerDe 라이브러리 단원을 참조하세요. 자세한 내용은 AWS 지식 센터의 Athena에서 AWS Config의 파일을 읽을 때 "HIVE_CURSOR_ERROR: Row is not a valid JSON Object - JSONException: Duplicate key"를 어떻게 해결해야 합니까?를 참조하세요.

가독성 좋게 꾸민 JSON의 HIVE_CURSOR_ERROR 메시지

Hive JSON SerDeOpenX JSON SerDe 라이브러리에서는 각 JSON 문서가 레코드의 필드를 구분하는 줄 종료 문자가 없는 한 줄의 텍스트에 있을 것으로 예상합니다. JSON 텍스트가 가독성 좋게 꾸민 형식이면 테이블을 만든 후 쿼리하려고 할 때 HIVE_CURSOR_ERROR: 행이 유효한 JSON 객체가 아님(HIVE_CURSOR_ERROR: Row is not a valid JSON Object) 또는 HIVE_CURSOR_ERROR: JsonParseException: 예기치 않은 입력 종료: OBJECT의 닫기 마커 필요(HIVE_CURSOR_ERROR: JsonParseException: Unexpected end-of-input: expected close marker for OBJECT) 같은 오류 메시지가 나타날 수 있습니다. 자세한 내용은 GitHub의 OpenX SerDe 문서에서 JSON 데이터 파일을 참조하세요.

여러 JSON 레코드가 SELECT COUNT를 1로 반환함

OpenX JSON SerDe를 사용하는 경우 레코드가 줄 바꿈 문자로 구분되어 있는지 확인합니다. 자세한 내용은 AWS 지식 센터의 입력 JSON 파일에 다수의 레코드가 있는 경우에도 Amazon Athena의 SELECT COUNT 쿼리가 레코드를 1개만 반환합니다를 참조하세요.

Cannot query a table created by a AWS Glue crawler that uses a custom JSON classifier

Athena 엔진은 사용자 지정 JSON 분류자를 지원하지 않습니다. 이 문제를 해결하려면 사용자 지정 분류자를 사용하지 않고 새 테이블을 생성해야 합니다. JSON을 변환하려면 CTAS를 사용하거나 뷰를 생성합니다. 예를 들어 배열로 작업하는 경우 UNNEST 옵션을 사용하여 JSON을 평면화할 수 있습니다. 또 다른 옵션은 사용자 지정 분류자를 지원하는 AWS Glue ETL 작업을 사용해 Amazon S3에서 데이터를 parquet로 변환한 다음 Athena에서 쿼리하는 것입니다.

MSCK REPAIR TABLE

MSCK REPAIR TABLE 관련 문제에 대한 자세한 내용은 MSCK REPAIR TABLE 페이지의 고려 사항 및 제한문제 해결 단원을 참조하세요.

출력 문제

Unable to verify/create output bucket

지정된 쿼리 결과 위치가 없거나 적절한 사용 권한이 없는 경우 이 오류가 발생할 수 있습니다. 자세한 내용은 AWS 지식 센터의 Amazon Athena에서 "Unable to verify/create output bucket" 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

TIMESTAMP result is empty

Athena에는 Java TIMESTAMP 형식이 필요합니다. 자세한 내용은 AWS 지식 센터의 Amazon Athena에서 테이블을 쿼리할 때 TIMESTAMP 결과가 비어 있음을 참조하세요.

Athena 쿼리 출력을 CSV 이외의 형식으로 저장

기본적으로 Athena는 CSV 형식으로만 파일을 출력합니다. SELECT 쿼리의 결과를 다른 형식으로 출력하려면 UNLOAD 문을 사용하면 됩니다. 자세한 내용은 UNLOAD 섹션을 참조하세요. 또한 format 테이블 속성을 사용하여 출력 형식을 구성하는 CTAS 쿼리를 사용할 수도 있습니다. UNLOAD와 달리, CTAS 기법을 사용하려면 테이블을 만들어야 합니다. 자세한 내용은 AWS 지식 센터의 Athena 쿼리 출력을 압축 형식과 같은 CSV 이외의 형식으로 저장하려면 어떻게 해야 합니까?를 참조하세요.

The S3 location provided to save your query results is invalid

출력 버켓 위치가 쿼리를 실행하는 리전과 동일한 리전에 있지 않은 경우 이 오류 메시지가 나타날 수 있습니다. 이를 방지하려면 쿼리를 실행하는 리전에 쿼리 결과 위치를 지정합니다. 단계는 쿼리 결과 위치 지정를 참조하세요.

Parquet 문제

org.apache.parquet.io.GroupColumnIO cannot be cast to org.apache.parquet.io.PrimitiveColumnIO

이 오류는 parquet 스키마 불일치로 인해 발생합니다. 기본 형식이 아닌 열(예: array)이 AWS Glue에서 기본 형식(예: string)으로 선언된 것입니다. 이 문제를 해결하려면 파일의 데이터 스키마를 조사하여 AWS Glue에 선언된 스키마와 비교합니다.

Parquet 통계 문제

Parquet 데이터를 읽을 때 다음과 같은 오류 메시지가 나타날 수 있습니다.

HIVE_CANNOT_OPEN_SPLIT: Index x out of bounds for length y HIVE_CURSOR_ERROR: Failed to read x bytes HIVE_CURSOR_ERROR: FailureException at Malformed input: offset=x HIVE_CURSOR_ERROR: FailureException at java.io.IOException: can not read class org.apache.parquet.format.PageHeader: Socket is closed by peer.

이 문제를 해결하려면 다음 예제와 같이 CREATE TABLE 또는 ALTER TABLE SET TBLPROPERTIES 문을 사용하여 Parquet SerDe parquet.ignore.statistics 속성을 true로 설정합니다.

CREATE TABLE 예제

... ROW FORMAT SERDE 'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' WITH SERDEPROPERTIES ('parquet.ignore.statistics'='true') STORED AS PARQUET ...

ALTER TABLE 예제

ALTER TABLE ... SET TBLPROPERTIES ('parquet.ignore.statistics'='true')

Parquet Hive SerDe에 대한 자세한 내용은 마루 SerDe 섹션을 참조하세요.

파티셔닝 문제

MSCK REPAIR TABLE does not remove stale partitions

Amazon S3에서 파티션을 수동으로 삭제한 다음 MSCK REPAIR TABLE을 실행하면 파일 시스템에서 파티션이 누락됨(Partitions missing from filesystem) 오류 메시지가 나타날 수 있습니다. MSCK REPAIR TABLE은 기한 경과된 파티션을 테이블 메타데이터에서 제거하지 않기 때문입니다. 기한 경과 파티션을 수동으로 제거하려면 ALTER TABLE DROP PARTITION을 사용합니다. 자세한 내용은 MSCK REPAIR TABLE 주제의 “문제 해결” 단원을 참조하세요.

MSCK REPAIR TABLE failure

많은 양의 파티션(예: 100,000개 이상)이 특정 테이블과 연결된 경우 MSCK REPAIR TABLE은 메모리 제한 때문에 실패할 수 있습니다. 이 제한을 해결하려면 ALTER TABLE ADD PARTITION을 대신 사용합니다.

MSCK REPAIR TABLE은 파티션을 삭제하지만 AWS Glue에 파티션을 추가하지 않습니다.

이 문제는 Amazon S3 경로가 소문자가 아닌 카멜 표기법이거나 IAM 정책이 glue:BatchCreatePartition 작업을 허용하지 않을 때 발생할 수 있습니다. 자세한 내용은 AWS 지식 센터의 MSCK REPAIR TABLE이 Athena에서 파티션을 감지하지만 AWS Glue Data Catalog에 파티션을 추가하지 않습니다를 참조하세요.

Partition projection ranges with the date format of dd-MM-yyyy-HH-mm-ss or yyyy-MM-dd do not work

올바르게 작동하려면 날짜 형식을 yyyy-MM-dd HH:00:00으로 설정해야 합니다. 자세한 내용은 Stack Overflow 게시물 Athena 파티션 프로젝션이 예상대로 작동하지 않음을 참조하세요.

PARTITION BY는 BIGINT 형식을 지원하지 않습니다.

데이터 형식을 string으로 변환하고 다시 시도하세요.

No meaningful partitions available

이 오류 메시지는 일반적으로 파티션 설정이 손상되었음을 의미합니다. 이 문제를 해결하려면 테이블을 삭제하고 새 파티션을 가진 테이블을 만듭니다.

Partition projection does not work in conjunction with range partitions

시간 범위 단위 projection.<columnName>.interval.unit이 파티션의 구분 기호와 일치하는지 확인합니다. 예를 들어 파티션이 일별로 구분되면 시간 범위 단위가 작동하지 않습니다.

범위를 하이픈으로 지정한 경우 파티션 프로젝션 오류 발생

range 테이블 속성을 쉼표 대신 하이픈으로 지정하면 다음과 같은 오류가 발생합니다. INVALID_TABLE_PROPERTY: For input string: "number-number". 범위 값을 하이픈이 아닌 쉼표로 구분해야 합니다. 자세한 내용은 정수 형식 섹션을 참조하세요.

HIVE_UNKNOWN_ERROR: Unable to create input format

하나 이상의 glue 파티션은 서로 다른 형식으로 선언됩니다. 각 glue 파티션은 독립적으로 고유한 입력 형식이 있기 때문입니다. 파티션이 AWS Glue에서 어떻게 정의되어 있는지 확인하세요.

HIVE_PARTITION_SCHEMA_MISMATCH

파티션의 스키마가 테이블의 스키마와 다르면 HIVE_PARTITION_SCHEMA_MISMATCH 오류 메시지와 함께 쿼리가 실패할 수 있습니다. 자세한 내용은 "HIVE_PARTITION_SCHEMA_MISMATCH"를 피하기 위한 파티션 스키마 동기화 단원을 참조하세요.

SemanticException table is not partitioned but partition spec exists

CREATE TABLE 문에 파티션이 정의되지 않으면 이 오류가 발생할 수 있습니다. 자세한 내용은 AWS 지식 센터의 Athena에서 "FAILED: SemanticException table is not partitioned but partition spec exists"라는 오류를 어떻게 해결해야 합니까?를 참조하세요.

0바이트 _$folder$ 파일

ALTER TABLE ADD PARTITION 문을 실행할 때 이미 존재하는 파티션과 잘못된 Amazon S3 위치를 지정하는 경우 Amazon S3에 partition_value_$folder$ 형식의 0바이트 자리 표시자 파일이 생성됩니다. 이러한 파일은 수동으로 제거해야 합니다.

이러한 일이 발생하지 않도록 하려면 아래와 같이 ALTER TABLE ADD PARTITION 문에서 ADD IF NOT EXISTS 구문을 사용합니다.

ALTER TABLE table_name ADD IF NOT EXISTS PARTITIION […]

Zero records returned from partitioned data

이 문제는 여러 가지 이유로 발생할 수 있습니다. 가능한 원인과 해결 방법은 AWS 지식 센터의 파티션을 정의하여 Amazon Athena에 테이블을 만들었는데 테이블을 쿼리할 때 0개의 레코드가 반환됩니다를 참조하세요.

HIVE_TOO_MANY_OPEN_PARTITIONS 섹션도 참조하세요.

권한

Amazon S3 쿼리할 때 Access Denied 오류가 표시됨

이 오류는 버킷의 데이터를 읽을 권한이 없거나 결과 버킷에 대한 쓰기 권한이 없거나 Amazon S3 경로에 us-east-1.amazonaws.com 같은 리전 엔드포인트가 포함된 경우에 발생합니다. 자세한 내용은 AWS 지식 센터의 Athena 쿼리를 실행하면 "Access Denied" 오류가 나타납니다를 참조하세요.

Amazon S3의 암호화된 데이터에 대해 DDL 쿼리를 실행할 때 Access Denied with Status Code: 403이 표시됨

다음 조건에 해당되면 Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied; Request ID: <request_id>)라는 오류 메시지가 나타날 수 있습니다.

  1. ALTER TABLE ADD PARTITION 또는 MSCK REPAIR TABLE 같은 DDL 쿼리를 실행합니다.

  2. 기본 암호화SSE-S3를 사용하도록 구성된 버킷이 있습니다.

  3. 이 버킷에는 PutObject 요청에서 PUT 헤더 "s3:x-amz-server-side-encryption": "true""s3:x-amz-server-side-encryption": "AES256"을 지정하도록 하는 다음과 같은 버킷 정책도 있습니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<resource-name>/*", "Condition": { "Null": { "s3:x-amz-server-side-encryption": "true" } } }, { "Effect": "Deny", "Principal": "*", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::<resource-name>/*", "Condition": { "StringNotEquals": { "s3:x-amz-server-side-encryption": "AES256" } } } ] }

이와 같은 경우 권장되는 해결 방법은 버킷의 기본 암호화가 이미 존재한다는 점을 감안하여 위와 같은 버킷 정책을 제거하는 것입니다.

다른 계정의 Amazon S3 버킷을 쿼리할 때 Access Denied with Status Code: 403이 표시됨

이 오류는 다른 AWS 서비스가 작성한 로그를 쿼리할 때 두 번째 계정이 버킷 소유자이지만 버킷의 객체를 소유하지 않은 경우에 발생할 수 있습니다. 자세한 내용은 AWS 지식 센터의 다른 계정의 버킷을 쿼리할 때 Amazon Athena에서 Amazon S3 예외 "Access Denied with Status Code: 403"이 표시됨을 참조하거나 지식 센터 동영상을 시청하세요.

IAM 역할 자격 증명을 사용하여 Athena JDBC 드라이버에 연결

역할의 임시 자격 증명을 검색하여 Athena에 대한 JDBC 연결을 인증할 수 있습니다. 임시 자격 증명의 최대 수명은 12시간입니다. 자세한 내용은 AWS 지식 센터의 JDBC 드라이버를 사용해 Athena에 연결할 때 IAM 역할 자격 증명을 사용하거나 다른 IAM 역할로 전환하는 방법은 어떻게 되나요?를 참조하세요.

쿼리 구문 문제

FAILED: NullPointerException name is null

TableType 속성을 지정하지 않고 AWS Glue CreateTable API 작업 또는 AWS CloudFormation AWS::Glue::Table 템플릿을 사용하여 Athena에서 사용할 테이블을 만든 다음 SHOW CREATE TABLE 또는 MSCK REPAIR TABLE 같은 DDL 쿼리를 실행하면, 실패: NullPointerException Name이 null임(FAILED: NullPointerException Name is null)이라는 오류 메시지가 표시될 수 있습니다.

이 오류를 해결하려면 AWS Glue CreateTable API 호출 또는 AWS CloudFormation 템플릿의 일부로 TableInput TableType 속성의 값을 지정하세요. TableType의 가능한 값은 EXTERNAL_TABLE 또는 VIRTUAL_VIEW입니다.

이 요구 사항은 AWS Glue CreateTable API 작업 또는 AWS::Glue::Table 템플릿을 사용하여 테이블을 만들 때만 적용됩니다. DDL 문이나 AWS Glue 크롤러를 사용하여 Athena용 테이블을 생성할 경우 TableType 속성이 자동으로 정의됩니다.

함수가 등록되지 않음

이 오류는 Athena에서 지원하지 않는 함수를 사용하려고 할 때 발생합니다. Athena에서 지원하는 함수 목록은 Amazon Athena의 함수를 참조하세요. 또는 쿼리 편집기에서 SHOW FUNCTIONS 문을 실행하세요. 자체적인 사용자 정의 함수(UDF)를 작성할 수도 있습니다. 자세한 내용은 AWS 지식 센터의 Athena에서 ‘함수가 등록되지 않음’이라는 구문 오류를 어떻게 해결합니까?를 참조하세요.

GENERIC_INTERNAL_ERROR 예외

GENERIC_INTERNAL_ERROR 예외는 다음과 같은 다양한 원인으로 인해 발생할 있을 수 있습니다.

  • GENERIC_INTERNAL_ERROR: Null – 다음 조건 중 하나에서 이 예외가 나타날 수 있습니다.

    • 테이블 정의에 있는 열의 데이터 형식과 데이터 세트의 실제 데이터 형식 간에 스키마가 일치하지 않습니다.

    • 구문이 부정확한 CREATE TABLE AS SELECT(CTAS) 쿼리를 실행 중입니다.

  • GENERIC_INTERNAL_ERROR: Parent builder is nullarray 데이터 형식의 열이 있는 테이블을 쿼리하고 OpenCSVSerDe 라이브러리를 사용하는 경우 이 예외가 발생할 수 있습니다. OpenCSVerde 형식은 array 데이터 형식을 지원하지 않습니다.

  • GENERIC_INTERNAL_ERROR: 값이 MAX_INT를 초과함(GENERIC_INTERNAL_ERROR: Value exceeds MAX_INT) – 소스 데이터 열이 INT 데이터 형식으로 정의되어 있고 2,147,483,647보다 큰 숫자 값이 열에 있는 경우 이 예외가 표시될 수 있습니다.

  • GENERIC_INTERNAL_ERROR: 값이 MAX_BYTE를 초과함(GENERIC_INTERNAL_ERROR: Value exceeds MAX_BYTE) - 소스 데이터 열에 데이터 형식 BYTE에 허용되는 크기를 초과하는 숫자 값이 있는 경우 이 예외가 표시될 수 있습니다. BYTE 데이터 형식은 TINYINT와 동일합니다. TINYINT는 2의 보수 형식의 부호 있는 8비트 정수로, 최솟값은 -128이고 최댓값은 127입니다.

  • GENERIC_INTERNAL_ERROR: 파티션 값 수가 필터 수와 일치하지 않음(GENERIC_INTERNAL_ERROR: Number of partition values does not match number of filters) - Amazon Simple Storage Service(Amazon S3) 데이터에 일관성 없는 파티션이 있는 경우 이 예외가 발생할 수 있습니다. 다음 조건에서는 파티션이 일관되지 않을 수 있습니다.

    • Amazon S3 S3의 파티션이 변경되었습니다(예: 새 파티션이 추가됨).

    • 테이블의 파티션 열 수가 파티션 메타데이터의 열 수와 일치하지 않습니다.

이러한 각 오류에 대한 자세한 내용은 AWS 지식 센터에서 Amazon Athena 테이블을 쿼리할 때 ‘GENERIC_INTERNAL_ERROR’ 오류를 해결하려면 어떻게 해야 합니까?를 참조하세요.

일치하는 그룹 수가 열 수와 일치하지 않습니다.

이 오류는 CREATE TABLE 문에 정규식 SerDe를 사용할 때 정규식 일치 그룹의 수가 테이블에 지정한 열 수와 일치하지 않는 경우에 발생합니다. 자세한 내용은 AWS 지식 센터의 Amazon Athena에서 "Number of matching groups doesn't match the number of columns"라는 RegexSerDe 오류를 해결하려면 어떻게 합니까?를 참조하세요.

queryString failed to satisfy constraint: Member must have length less than or equal to 262144

Athena의 최대 쿼리 문자열 길이(262,144바이트)는 조정 가능한 할당량이 아닙니다. AWS Support에서 할당량을 늘릴 수는 없지만 사용자가 긴 쿼리를 더 작은 쿼리로 분할하여 문제를 해결할 수 있습니다. 자세한 내용은 AWS 지식 센터에서 Athena의 최대 쿼리 문자열 길이를 늘리려면 어떻게 해야 합니까?를 참조하세요.

SYNTAX_ERROR: Column cannot be resolved

이 오류는 바이트 순서 표시(BOM)가 포함된 UTF-8 인코딩 CSV 파일로부터 AWS Glue 크롤러가 생성한 테이블을 쿼리할 때 발생할 수 있습니다. AWS Glue는 BOM을 인식하지 못하여 이를 물음표로 변경하기 때문에 Amazon Athena에서 이를 인식할 수 없습니다. 해결책은 Athena 또는 AWS Glue에서 물음표를 제거하는 것입니다.

함수 호출에 사용하는 인수가 너무 많음

Athena 엔진 버전 3에서 함수의 인수는 127개를 초과할 수 없습니다. 이 제한은 설계에 따른 수치입니다. 함수에서 파라미터가 127개를 초과하는 경우 다음과 같은 오류 메시지가 나타납니다.

TOO_MANY_ARGUMENTS: line nnn:nn: Too many arguments for function call function_name().

이 문제를 해결하려면 함수 호출당 파라미터를 더 적게 사용합니다.

쿼리 시간 초과 문제

Athena 쿼리에서 시간 초과 오류가 발생하는 경우 CloudTrail 로그를 확인하세요. AWS Glue 또는 Lake Formation API의 제한으로 인해 쿼리 시간이 초과될 수 있습니다. 이러한 오류가 발생하는 경우 해당 오류 메시지는 제한 문제가 아니라 쿼리 시간 초과 문제를 나타낼 수 있습니다. 문제를 해결하려면 AWS Support에 문의하기 전에 CloudTrail 로그를 확인할 수 있습니다. 자세한 정보는 AWS CloudTrail 로그 쿼리AWS CloudTrail을 사용하여 Amazon Athena API 호출 로깅 섹션을 참조하십시오.

ListTableMetadata API를 직접적으로 호출할 때 페더레이션 쿼리의 쿼리 시간 초과 문제에 대한 자세한 내용은 ListTableMetadata 호출 중 제한 시간 초과 섹션을 참조하세요.

제한(Throttling) 문제

쿼리가 Amazon S3, AWS KMS, AWS Glue 또는 AWS Lambda와 같은 종속 서비스의 한도를 초과하면 다음 메시지를 예상할 수 있습니다. 이러한 문제를 해결하려면 동일한 계정에서 발생하는 동시 호출 수를 줄여야 합니다.

서비스 오류 메시지
AWS Glue AWSGlueException: 속도를 초과했습니다.
AWS KMS You have exceeded the rate at which you may call KMS. Reduce the frequency of your calls.
AWS Lambda

Rate exceeded

TooManyRequestsException

Amazon S3 AmazonS3Exception: 요청 속도를 줄여야 합니다.

Athena를 사용할 때 Amazon S3 제한을 방지하는 방법에 대한 자세한 내용은 Amazon S3 제한 방지 섹션을 참조하세요.

보기

Views created in Apache Hive shell do not work in Athena

근본적으로 다른 구현이기 때문에 Apache Hive 셸에서 생성된 뷰는 Athena와 호환되지 않습니다. 이 문제를 해결하려면 Athena에서 뷰를 다시 생성합니다.

View is stale; it must be re-created

뷰의 기초가 되는 테이블이 변경되거나 삭제된 경우 이 오류가 나타날 수 있습니다. 해결 방법은 뷰를 다시 생성하는 것입니다. 자세한 내용은 AWS 지식 센터의 Athena에서 "View is stale; it must be re-created"라는 오류를 어떻게 해결해야 합니까?를 참조하세요.

작업 그룹

작업 그룹 문제 해결에 대한 자세한 내용은 작업 그룹 문제 해결 단원을 참조하세요.

추가 리소스

다음 페이지에서는 Amazon Athena의 문제 해결을 위한 추가 정보를 제공합니다.

다음 AWS 리소스도 도움이 될 수 있습니다.

문제 해결에는 종종 전문가 또는 도우미 커뮤니티의 반복적인 질의와 발견이 필요한 경우가 많습니다. 이 페이지에 있는 제안 사항을 시도한 후에도 문제가 계속 발생하면 AWS Support에 문의하거나(AWS Management Console에서 지원(Support), 지원 센터(Support Center) 클릭) Amazon Athena 태그를 사용하여 AWS re:Post에 대해 질문하세요.