Amazon DynamoDB 커넥터를 통해 Amazon Athena는 DynamoDB와 통신할 수 있고, 이로써 SQL을 사용하여 테이블을 쿼리할 수 있습니다. INSERT INTO 같은 쓰기 작업은 지원되지 않습니다.
이 커넥터는 Glue 데이터 카탈로그에 페더레이션 카탈로그로 등록할 수 있습니다. 카탈로그, 데이터베이스, 테이블, 열, 행 및 태그 수준에서 Lake Formation에 정의된 데이터 액세스 제어를 지원합니다. 이 커넥터는 Glue Connections를 사용하여 Glue의 구성 속성을 중앙 집중화합니다.
계정에서 Lake Formation을 활성화한 경우 AWS Serverless Application Repository에 배포한 Athena 페더레이션형 Lambda 커넥터의 IAM 역할은 Lake Formation에서 AWS Glue Data Catalog에 대한 읽기 액세스 권한을 가지고 있어야 합니다.
사전 조건
Athena 콘솔 또는 AWS Serverless Application Repository를 사용하여 AWS 계정에 커넥터를 배포합니다. 자세한 내용은 데이터 소스 연결 생성 또는 AWS Serverless Application Repository을 사용하여 데이터 소스 커넥터 배포을 참조하세요.
제한 사항
DynamoDB 연결을 Glue Catalog 및 Lake Formation으로 마이그레이션하면 소문자 테이블과 열 이름만 인식됩니다.
파라미터
이 섹션의 파라미터를 사용하여 DynamoDB 커넥터를 구성합니다.
Glue 연결 객체를 사용하여 DynamoDB 커넥터를 구성하는 것이 좋습니다. 이렇게 하려면 DynamoDB 커넥터 Lambda의 glue_connection
환경 변수를 사용할 Glue 연결 이름으로 설정합니다.
Glue 연결 속성
다음 명령을 사용하여 Glue 연결 객체에 대한 스키마를 가져옵니다. 이 스키마에는 연결을 제어할 때 사용할 수 있는 모든 파라미터가 포함되어 있습니다.
aws glue describe-connection-type --connection-type DYNAMODB
Lambda 환경 속성
glue_connection - 페더레이션 커넥터와 연결된 Glue 연결의 이름을 지정합니다.
AWS Glue에서 데이터베이스 및 테이블 설정
커넥터의 기본 제공 스키마 추론 기능이 제한되어 있으므로 메타데이터에 AWS Glue를 사용할 수 있습니다. 이렇게 하려면 AWS Glue에 데이터베이스와 테이블이 있어야 합니다. DynamoDB에서 사용할 수 있도록 하려면 해당 속성을 편집해야 합니다.
AWS Glue 콘솔에서 데이터베이스 속성을 편집하려면 다음을 수행하세요.
AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/
에서 AWS Glue 콘솔을 엽니다. -
탐색 창에서 데이터 카탈로그를 확장하고 데이터베이스를 선택합니다.
Databases(데이터베이스) 페이지에서 기존 데이터베이스를 편집하거나 Add database(데이터베이스 추가)를 선택하여 데이터베이스를 생성할 수 있습니다.
-
데이터베이스 목록에서 편집하려는 데이터베이스의 링크를 선택합니다.
-
편집을 선택합니다.
-
데이터베이스 업데이트 페이지에서 데이터베이스 설정 아래의 위치에 문자열
dynamo-db-flag
를 추가합니다. 이 키워드는 Athena DynamoDB 커넥터가 보충 메타데이터에 사용하고default
이외의 AWS Glue 데이터베이스에 필요한 테이블이 데이터베이스에 포함되어 있음을 나타냅니다.dynamo-db-flag
속성은 데이터베이스가 많은 계정에서 데이터베이스를 필터링하는 데 유용합니다. -
Update Database(데이터베이스 업데이트)를 선택합니다.
AWS Glue 콘솔에서 테이블 속성을 편집하려면
AWS Management Console에 로그인하여 https://console.aws.amazon.com/glue/
에서 AWS Glue 콘솔을 엽니다. -
탐색 창에서 데이터 카탈로그를 확장하고 테이블을 선택합니다.
-
테이블 페이지의 테이블 목록에서 편집하려는 테이블의 연결된 이름을 선택합니다.
-
Actions(작업), Edit table(테이블 편집)을 선택합니다.
-
Edit table(테이블 편집) 페이지의 Table properties(테이블 속성) 섹션에서 필요에 따라 다음 테이블 속성을 추가합니다. AWS Glue DynamoDB 크롤러를 사용하는 경우 이러한 속성이 자동으로 설정됩니다.
-
dynamodb – 테이블을 보충 메타데이터에 사용할 수 있음을 Athena DynamoDB 커넥터에 나타내는 문자열입니다. classification(분류)이라는 필드 아래의 테이블 속성에
dynamodb
를 입력합니다(정확히 일치).참고
AWS Glue 콘솔의 테이블 작성 프로세스의 일부인 테이블 속성 설정 페이지에는 분류 필드가 있는 데이터 형식 섹션이 있습니다. 여기서는
dynamodb
를 입력하거나 선택할 수 없습니다. 대신, 테이블을 생성한 후 테이블을 편집하고 테이블 속성 섹션에서classification
과dynamodb
를 키-값 페어로 입력하는 단계를 수행합니다. -
sourceTable – DynamoDB에서 소스 테이블 이름을 정의하는 선택적 테이블 속성입니다. AWS Glue 테이블 이름 지정 규칙으로 인해 DynamoDB 테이블과 동일한 이름으로 AWS Glue 테이블을 생성할 수 없는 경우 이 옵션을 사용합니다. 예를 들어, AWS Glue 테이블 이름에는 대문자가 허용되지 않지만 DynamoDB 테이블 이름에는 대문자가 허용됩니다.
-
columnMapping – 열 이름 매핑을 정의하는 선택적 테이블 속성입니다. AWS Glue 열 이름 지정 규칙으로 인해 DynamoDB 테이블과 동일한 열 이름으로 AWS Glue 테이블을 생성할 수 없는 경우 이 옵션을 사용합니다. 예를 들어, AWS Glue 열 이름에는 대문자가 허용되지 않지만 DynamoDB 열 이름에는 대문자가 허용됩니다. 속성 값은 col1=Col1,col2=Col2 형식이어야 합니다. 단, 열 매핑은 최상위 열 이름에만 적용되고 중첩된 필드에는 적용되지 않습니다.
-
defaultTimeZone – 명시적 표준 시간대가 없는
date
또는datetime
값에 적용되는 선택적 테이블 속성입니다. 이 값을 설정하면 데이터 소스 기본 표준 시간대와 Athena 세션 시간대 간의 불일치를 방지하는 것이 좋습니다. -
datetimeFormatMapping – AWS Glue
date
또는timestamp
데이터 형식의 열에서 데이터를 구문 분석할 때 사용할date
또는datetime
형식을 지정하는 선택적 테이블 속성입니다. 이 속성을 지정하지 않으면 커넥터는 ISO-8601 형식을 추론하려고 시도합니다. 커넥터가 date
또는datetime
형식을 추론할 수 없거나 원시 문자열을 구문 분석할 수 없는 경우 결과에서 값이 생략됩니다.datetimeFormatMapping
값은col1=someformat1,col2=someformat2
형식이어야 합니다. 다음은 몇 가지 예제 형식입니다.yyyyMMdd'T'HHmmss ddMMyyyy'T'HH:mm:ss
열에 표준 시간대가 없는
date
또는datetime
값이 있고WHERE
절의 열을 사용하려는 경우 열에 대한datetimeFormatMapping
속성을 설정합니다.
-
-
열을 수동으로 정의하는 경우 적절한 데이터 형식을 사용하는지 확인합니다. 크롤러를 사용한 경우 크롤러가 검색한 열과 유형을 검증합니다.
-
Save(저장)를 선택합니다.
필수 권한
이 커넥터에 필요한 IAM 정책에 대한 자세한 내용을 알아보려면 athena-dynamodb.yamlPolicies
섹션을 검토하세요. 다음 목록에 필요한 권한이 요약되어 있습니다.
-
Amazon S3 쓰기 액세스 - 대규모 쿼리의 결과 유출을 위해서는 커넥터에 Amazon S3 위치에 대한 쓰기 액세스 권한이 필요합니다.
-
Athena GetQueryExecution - 커넥터는 업스트림 Athena 쿼리가 종료된 경우 이 권한을 사용하여 빠른 실패를 수행합니다.
-
AWS Glue Data Catalog - 스키마 정보를 가져오기 위해 DynamoDB 커넥터에 AWS Glue Data Catalog에 대한 읽기 전용 액세스 권한이 필요합니다.
-
CloudWatch Logs - 로그를 저장하기 위해 커넥터 CloudWatch Logs에 대한 액세스 권한이 필요합니다.
-
DynamoDB 읽기 액세스 – 커넥터는
DescribeTable
,ListSchemas
,ListTables
,Query
및Scan
API 작업을 사용합니다.
성능
Athena DynamoDB 커넥터는 병렬 스캔을 지원하고 DynamoDB 쿼리의 일부로 조건자 푸시다운을 시도합니다. X
개의 고유 값이 있는 해시 키 조건자는 DynamoDB에 대한 X
개의 쿼리 호출을 생성합니다. 다른 모든 조건자 시나리오에서는 Y
개의 스캔 호출이 발생합니다. 여기서 Y
는 테이블 크기와 프로비저닝된 처리량을 기반으로 경험적으로 결정됩니다. 그러나 열 하위 세트를 선택할 때 쿼리 실행 런타임이 길어지는 경우가 있습니다.
LIMIT
절 및 간단한 조건자가 푸시다운되면 스캔하는 데이터가 줄어들 수 있으며 이에 따라 쿼리 실행 런타임이 감소할 수 있습니다.
LIMIT 절
LIMIT N
문은 쿼리로 스캔하는 데이터를 줄입니다. LIMIT N
푸시다운을 통해 커넥터는 Athena에 N
개 행만 반환합니다.
Predicates
조건자는 부울 값으로 평가되고 여러 조건에 따라 행을 필터링하는 SQL 쿼리의 WHERE
절에 사용되는 표현식입니다. Athena DynamoDB 커넥터는 이러한 표현식을 결합하고 DynamoDB로 직접 푸시하여 기능을 개선하고 스캔하는 데이터를 줄일 수 있습니다.
다음 Athena DynamoDB 커넥터 연산자는 조건자 푸시다운을 지원합니다.
-
부울: AND
-
관계: EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, IS_NULL
결합된 푸시다운 예제
쿼리 기능을 개선하기 위해 다음 예제와 같이 푸시다운 유형을 결합합니다.
SELECT *
FROM my_table
WHERE col_a > 10 and col_b < 10
LIMIT 10
DynamoDB를 비롯한 페더레이션된 쿼리의 성능을 개선하기 위해 조건자 푸시다운을 사용하는 방법에 대한 문서는 AWS 빅 데이터 블로그의 Improve federated queries with predicate pushdown in Amazon Athena
패스스루 쿼리
DynamoDB 커넥터는 패스스루 쿼리를 지원하고 PartiQL 구문을 사용합니다. DynamoDB GetItem API 작업은 지원되지 않습니다. PartiQL을 사용하여 DynamoDB를 쿼리하는 방법에 대한 자세한 내용은 Amazon DynamoDB 개발자 안내서의 DynamoDB용 PartiQL select 문을 참조하세요.
DynamoDB에서 패스스루 쿼리를 사용하려면 다음 구문을 사용합니다.
SELECT * FROM TABLE(
system.query(
query => 'query_string
'
))
다음 DynamoDB 패스스루 쿼리 예제는 PartiQL을 사용하여 DateWatched
속성이 12/24/22 이후인 Fire TV Stick 디바이스 목록을 반환합니다.
SELECT * FROM TABLE(
system.query(
query => 'SELECT Devices
FROM WatchList
WHERE Devices.FireStick.DateWatched[0] > '12/24/22''
))
문제 해결
정렬 키 열의 다중 필터
오류 메시지: KeyConditionExpressions must only contain one condition per key
원인: 이 문제는 Athena 엔진 버전 3의 경우 DynamoDB 정렬 키 열에 하한 및 상한 필터가 모두 있는 쿼리에서 발생할 수 있습니다. DynamoDB는 정렬 키에 대해 둘 이상의 필터 조건을 지원하지 않으므로 커넥터가 두 조건이 모두 적용된 쿼리를 푸시다운하려고 하면 오류가 발생합니다.
솔루션: 커넥터를 버전 2023.11.1 이상으로 업데이트합니다. 커넥터 업데이트에 대한 지침은 데이터 소스 커넥터 업데이트 섹션을 참조하세요.
비용
커넥터 사용 비용은 사용되는 기본 AWS 리소스에 따라 다릅니다. 스캔을 사용하는 쿼리는 많은 읽기 용량 단위(RCU)
추가 리소스
-
Amazon Athena DynamoDB 커넥터 사용에 대한 소개는 AWS Prescriptive Guidance Patterns 가이드의 Access, query, and join Amazon DynamoDB tables using Athena를 참조하세요.
-
Athena DynamoDB 커넥터를 사용하여 SQL로 DynamoDB의 데이터를 쿼리하고 Amazon QuickSight에서 통찰력을 시각화하는 방법에 대한 문서는 AWS 빅 데이터 블로그 게시물 Visualize Amazon DynamoDB insights in Amazon QuickSight using the Amazon Athena DynamoDB connector and AWS Glue
를 참조하세요. -
Amazon DynamoDB, Athena 및 Amazon QuickSight에서 Amazon Athena DynamoDB 커넥터를 사용하여 간단한 거버넌스 대시보드를 생성하는 방법에 대한 문서는 AWS 빅 데이터 블로그 게시물 Query cross-account Amazon DynamoDB tables using Amazon Athena Federated Query
를 참조하세요. 이 커넥터에 대한 추가 정보를 알아보려면 GitHub.com의 해당 사이트
를 참조하세요.