Amazon Athena DynamoDB 커넥터를 사용할 때 “열을 찾을 수 없음” 오류가 발생합니다.
간략한 설명
“열을 찾을 수 없음” 오류는 Athena DynamoDB 커넥터에 내장된 스키마 추론의 기능이 제한되어 있기 때문에 발생합니다. Athena DynamoDB 커넥터는 AWS Lambda 함수를 사용해 테이블 스키마를 유추합니다. 그리고 테이블에 있는 데이터 샘플만 분석합니다.
이 함수가 데이터의 샘플만 분석하기 때문에 스키마에서 샘플 데이터에 속하지 않는 열의 데이터를 놓칠 수 있습니다. Amazon DynamoDB 테이블의 데이터 형식이 잘못된 경우에도 “열을 찾을 수 없음” 오류가 발생할 수 있습니다.
중요:
- DynamoDB 테이블에는 Athena에서 지원하지 않는 카멜 표기법, 대문자, 또는 데이터 유형이 포함될 수 없습니다.
- AWS Glue와 Athena는 카멜 표기법, 대문자, 또는 밑줄 이외의 특수 문자를 읽을 수 없습니다.
해결 방법
AWS Glue를 사용해 DynamoDB 테이블에서 스키마를 유추하려면 다음 단계를 따르세요.
- AWS Glue 크롤러를 사용해 AWS Glue 테이블을 생성합니다.
- DynamoDB 테이블 스키마를 검토해 크롤러가 데이터를 제대로 검색했는지 확인합니다.
- ColumnMapping 속성을 사용해 누락된 데이터 열을 방지할 수 있습니다.
참고: 데이터베이스 이름, 테이블 이름, 열 이름은 255자를 초과할 수 없습니다. 소문자, 숫자, 밑줄을 사용할 수 있습니다.
AWS Glue 크롤러를 사용하여 AWS Glue 테이블을 생성하세요.
다음 단계를 따르세요.
- AWS Glue 콘솔을 엽니다.
- 탐색 창의 데이터 카탈로그에서 크롤러를 선택합니다.
- 크롤러 화면에서 크롤러 생성을 선택합니다.
- 크롤러 속성 설정 페이지의 크롤러 세부 정보에서 크롤러 이름을 입력하세요. 그리고 다음을 선택합니다.
- 데이터 소스 구성에서 아직 없음을 선택합니다. 그리고 데이터 원본 추가를 선택합니다.
- 데이터 소스 추가 대화 상자에서 다음 정보를 입력합니다.
데이터 소스에서 DynamoDB를 선택합니다.
테이블 이름에 DynamoDB 테이블 이름을 입력합니다.
DynamoDB 데이터 소스 추가를 선택합니다. 그리고 다음을 선택합니다.
- 보안 설정 구성 페이지의 IAM 역할에서 기존 IAM 역할을 선택합니다. 또는 새 IAM 역할 생성을 선택합니다. 그리고 다음을 선택합니다.
참고: IAM 역할에 필요한 권한이 있어야 합니다.
- 출력 및 일정 설정 페이지의 출력 구성에서 데이터베이스 추가를 선택합니다. 새 탭이 열리고 데이터베이스 만들기 페이지가 열립니다.
- 데이터베이스 생성 페이지에서 다음 정보를 입력합니다.
이름에 함수의 이름을 입력합니다.
위치 값을 dynamo-db-flag로 설정합니다. 그리고 데이터베이스 생성을 선택합니다. 출력 및 일정 설정 탭으로 돌아갑니다.
참고: Athena에서 테이블을 인식하려면 dynamo-db-flag와 동일한 값을 사용해야 합니다.
- 출력 및 일정 설정 페이지의 대상 데이터베이스에서 데이터베이스를 선택합니다. 그리고 다음을 선택합니다.
- 크롤러 생성을 선택합니다.
- 크롤러 페이지에서 크롤러 실행을 선택합니다.
테이블 스키마 검토
다음 단계를 따르세요.
- AWS Glue 콘솔을 엽니다.
- 탐색 창의 데이터 카탈로그에서 데이터베이스를 선택합니다.
- 데이터베이스를 선택합니다.
- 테이블에서 내 테이블을 선택합니다.
- 열을 검토하여 열 및 데이터 유형이 제대로 검색되었는지 확인합니다.
columnMapping 속성을 구성합니다.
참고:열 매핑 파라미터는 최상위 열 이름에만 적용됩니다. 중첩된 필드에는 적용되지 않습니다.
다음 단계를 따르세요.
- AWS Glue 콘솔을 엽니다.
- 탐색 창의 데이터 카탈로그에서 테이블을 선택합니다.
- 테이블 페이지에서 테이블을 선택합니다.
- 작업을 선택하고 작업 편집을 선택합니다.
- 테이블 편집 페이지의 테이블 속성에서 추가를 선택하고 다음 정보를 입력합니다.
키 필드에 columnMapping을 입력합니다.
값 필드에 mapping value=column name 형식으로 열 이름을 입력합니다.
예를 들어, 테이블에 firstName, Lastname, Age, and region 등의 열이 포함되어 있습니다. 다음의 columnMapping 속성 값 형식을 사용하세요.
firstname=firstName
lastname=Lastname
age=Age
region=region
- Amazon Athena 콘솔을 엽니다.
- 쿼리 편집기 페이지의 데이터에 다음 정보를 입력합니다.
데이터 소스에 DynamoDB를 입력합니다.
데이터베이스에서 내 데이터베이스를 선택합니다.
일반 사용자 오류
"GENERIC_USER_ERROR: Encountered an exception" 오류가 발생할 수 있습니다. 이 오류는 DynamoDB 테이블의 열에 있는 데이터가 Athena와 호환되지 않을 때 발생할 수 있습니다. 문제를 해결하려면 테이블의 데이터를 Athena와 호환되는 유형으로 변경하세요.
테이블의 데이터 유형을 변경하려면 다음 단계를 완료하세요.
- AWS Glue 콘솔을 엽니다.
- 탐색 창의 데이터 카탈로그에서 테이블을 선택합니다.
- 테이블 페이지에서 업데이트하려는 테이블을 선택합니다.
- 스키마에서 스키마 편집을 선택합니다.
- 호환되지 않는 데이터가 있는 열을 선택하고 편집을 선택합니다.
- 데이터 유형에서 Athena와 호환되는 데이터 유형을 선택합니다. 그런 다음 저장을 선택합니다.
- 새 테이블 버전으로 저장을 선택합니다.
- Athena 콘솔을 엽니다.
- 쿼리 편집기에서 쿼리를 다시 실행합니다.
관련 정보
Athena와 AWS Glue를 함께 사용할 때의 모범 사례