Amazon Athena에서 Apache Iceberg 테이블을 사용했는데 오류 메시지를 받았습니다.
해결 방법
수신한 오류 메시지에 대한 문제 해결 단계를 따르십시오.
Unsupported table property key
이 오류는 CREATE TABLE 또는 ALTER TABLE 문의 TBLPROPERTIES 절에서 지원되는 테이블 속성을 사용하지 않을 때 발생합니다. Athena에서는 테이블 속성에 미리 정의된 키-값 쌍 목록만 사용하여 Iceberg 테이블을 생성하거나 수정할 수 있습니다.
이 문제를 해결하려면 Iceberg 테이블에서 지원되는 테이블 속성을 사용해야 합니다.
CREATE TABLE statement cannot be generated because table has unsupported properties
이 오류는 Athena가 테이블 구조를 재현할 수 없을 때 Iceberg 테이블에서 SHOW CREATE TABLE DDL 문을 사용하는 쿼리에서 발생합니다. 테이블 속성을 표시하려면 SHOW CREATE TABLE 대신 DESCRIBE FORMATTED DDL 문을 사용하십시오.
TABLE_REDIRECTION_ERROR
이 오류는 지원되지 않는 Iceberg 테이블 메타데이터를 사용하는 Athena SELECT 쿼리에서 발생합니다. Athena SELECT 쿼리에 지원되는 Iceberg 테이블 메타데이터가 포함되어 있는지 확인하십시오.
NOT_SUPPORTED: Type not supported for Iceberg
이 오류는 지원되지 않는 데이터 유형을 Iceberg 테이블에서 사용할 때 발생합니다. 예를 들어 tinyint, smallint 및 char Athena 데이터 유형은 Iceberg 테이블에서 지원되지 않습니다. Athena 쿼리가 Iceberg 테이블에서 지원되는 데이터 유형을 사용하는지 확인하십시오.
ICEBERG_COMMIT_ERROR
이 오류는 여러 명령문이 병렬 Iceberg 테이블 업데이트에서 실행되는 동일한 파일 세트를 수정하려고 할 때 발생할 수 있습니다. 예를 들어 이 오류는 여러 DELETE 문이 병렬로 실행되고 동일한 레코드 세트를 동시에 삭제하려고 할 때 발생합니다.
이 문제를 방지하려면 다음 작업을 수행하십시오.
- 병렬 데이터 처리를 피하려면 쿼리 업데이트를 순차적으로 실행해야 합니다.
- Iceberg 테이블을 업데이트할 때 지수 백오프가 있는 재시도 메커니즘을 구현합니다.
참고: Athena는 AWS Glue 낙관적 잠금만 지원합니다. 다른 잠금 방법을 사용하여 Iceberg 테이블을 수정하면 데이터가 손실되고 트랜잭션이 중단될 수 있습니다.
자세한 내용은 Apache Iceberg 웹사이트에서 낙관적 잠금을 참조하십시오.
GENERIC_INTERNAL_ERROR: Cannot write delete files in a v1 table
이 오류는 Iceberg v1 테이블에서 DELETE 작업을 시도할 때 발생합니다. Athena는 Iceberg v2 테이블에서만 생성 및 작동됩니다.
Iceberg 테이블이 Athena 엔진 버전 2를 사용하는지 확인하십시오. 다른 유형의 엔진을 사용하는 경우 행 수준 삭제를 허용하려면 format-version 테이블 속성을 2로 설정해야 합니다. 예를 들어 Iceberg 테이블을 작성하고 해당 테이블을 AWS Glue Data Catalog에 등록할 경우 버전 2를 사용하십시오.
자세한 내용은 Apache Iceberg 웹사이트에서 형식 삭제를 참조하십시오.
GENERIC_INTERNAL_ERROR: com.facebook.presto.spi.PrestoException: The specified key does not exist
이 오류는 매니페스트 목록 또는 metadata.json과 같은 메타데이터 파일을 삭제할 때 발생합니다. 그러면 Athena 쿼리가 실패합니다. 파일을 성공적으로 복구할 수 없는 경우 테이블을 스냅샷 또는 타임스탬프로 롤백하십시오.
참고: Athena 쿼리 편집기가 아닌 AWS Glue 또는 Amazon EMR과 같은 Spark 환경에서 테이블을 롤백해야 합니다.
테이블을 특정 스냅샷 ID로 롤백하려면 roll_to_snapshot Apache Iceberg 명령을 실행하십시오.
CALL catalog_name.system.rollback_to_snapshot('your-db.your-table', your-snapshot-id)
참고: your-db, your-table 및 your-snapshot-id를 원하는 변수로 바꾸십시오.
테이블을 특정 타임스탬프로 롤백하려면 rollback_to_timestamp Apache Iceberg 명령을 실행하십시오.
CALL catalog_name.system.rollback_to_timestamp('your-db.your-table', TIMESTAMP 'yyyy-mm-dd hh:mm:ss')
참고: your-db, your-table 및 yyyy-mm-dd hh:mm:ss를 원하는 변수로 바꾸십시오.
자세한 내용은 Apace Iceberg 웹사이트에서 rollback_to_snapshot 및 rollback_to_timestamp를 참조하십시오.
관련 정보
Athena의 문제 해결
Spark에서 교차 계정 AWS Glue Data Catalog와 함께 Apache Iceberg를 사용하려면 어떻게 해야 합니까?
Apache Iceberg 테이블 쿼리