페더레이션 쿼리 사용
하나 이상의 데이터 커넥터를 구성하여 계정에 배포한 후 Athena 쿼리에 사용할 수 있습니다.
단일 데이터 소스 쿼리
이 섹션의 예제에서는 Amazon Athena CloudWatch 커넥터를 구성하여 계정에 배포했다고 가정합니다. 다른 커넥터를 사용할 때 동일한 방법을 사용하여 쿼리합니다.
CloudWatch 커넥터를 사용하는 Athena 쿼리를 생성하려면
https://console.aws.amazon.com/athena/
에서 Athena 콘솔을 엽니다. -
Athena 쿼리 편집기에서
FROM
절에 다음 구문을 사용하는 SQL 쿼리를 생성합니다.MyCloudwatchCatalog
.database_name
.table_name
예시
다음 예제에서는 Athena CloudWatch 커넥터를 사용하여 /var/ecommerce-engine/order-processor
CloudWatch Logs 로그 그룹의 all_log_streams
뷰에 연결합니다. all_log_streams
뷰는 로그 그룹에 있는 모든 로그 스트림의 뷰입니다. 예제 쿼리는 반환되는 행 수를 100으로 제한합니다.
SELECT * FROM "MyCloudwatchCatalog"."/var/ecommerce-engine/order-processor".all_log_streams LIMIT 100;
다음 예제에서는 이전 예제와 동일한 뷰에서 정보를 구문 분석합니다. 이 예제에서는 주문 ID와 로그 수준을 추출하고 INFO
수준이 있는 메시지를 필터링합니다.
SELECT log_stream as ec2_instance, Regexp_extract(message '.*orderId=(\d+) .*', 1) AS orderId, message AS order_processor_log, Regexp_extract(message, '(.*):.*', 1) AS log_level FROM MyCloudwatchCatalog."/var/ecommerce-engine/order-processor".all_log_streams WHERE Regexp_extract(message, '(.*):.*', 1) != 'INFO'
여러 데이터 소스 쿼리
좀 더 복잡한 예제로 다음 데이터 소스를 사용하여 고객 구매와 관련된 데이터를 저장하는 전자 상거래 회사를 가정합니다.
-
Amazon RDS for MySQL
: 제품 카탈로그 데이터 저장용 -
Amazon DocumentDB
: 이메일 주소 및 배송 주소와 같은 고객 계정 데이터 저장용 -
Amazon DynamoDB
: 주문 배송 및 추적 데이터 저장용
이 전자 상거래 애플리케이션의 데이터 분석가가 일부 지역의 배송 시간이 현지 기상 조건의 영향을 받았다는 사실을 알게 되었다고 가정합니다. 분석가는 지연된 주문 건수, 영향을 받는 고객의 위치, 영향을 가장 많이 받는 제품을 파악하려고 합니다. 분석가는 정보 소스를 개별적으로 조사하는 대신 Athena를 사용하여 하나의 페더레이션된 쿼리에서 데이터를 결합합니다.
SELECT t2.product_name AS product, t2.product_category AS category, t3.customer_region AS region, count(t1.order_id) AS impacted_orders FROM my_dynamodb.default.orders t1 JOIN my_mysql.products.catalog t2 ON t1.product_id = t2.product_id JOIN my_documentdb.default.customers t3 ON t1.customer_id = t3.customer_id WHERE t1.order_status = 'PENDING' AND t1.order_date between '2022-01-01' AND '2022-01-05' GROUP BY 1, 2, 3 ORDER BY 4 DESC
페더레이션 뷰 쿼리
페더레이션된 소스를 쿼리할 때 보기를 사용하여 기본 데이터 소스를 난독화하거나 데이터를 쿼리하는 다른 분석가로부터 복잡한 조인을 숨길 수 있습니다.
고려 사항 및 제한
-
페더레이션된 보기에는 Athena 엔진 버전 3이 필요합니다.
-
페더레이션된 보기는 기본 데이터 소스가 아닌 AWS Glue에 저장됩니다.
-
페더레이션된 카탈로그로 생성된 보기는 다음 예제와 같이 정규화된 이름 구문을 사용해야 합니다.
"ddbcatalog"."default"."customers"
-
페더레이션된 소스에서 쿼리를 실행하는 사용자는 페더레이션된 소스를 쿼리할 수 있는 권한이 있어야 합니다.
-
페더레이션된 보기에는
athena:GetDataCatalog
권한이 필요합니다. 자세한 내용은 Athena 페더레이션 쿼리에 대한 액세스 허용: 정책 예제 단원을 참조하십시오.
예시
다음 예제에서는 페더레이션된 데이터 소스에 저장된 데이터에서 customers
보기를 생성합니다.
CREATE VIEW customers AS SELECT * FROM my_federated_source.default.table
다음 쿼리 예제에서는 기본 페더레이션된 데이터 소스 대신, customers
보기를 참조하는 쿼리를 보여줍니다.
SELECT id, SUM(order_amount) FROM customers GROUP by 1 ORDER by 2 DESC LIMIT 50
다음 예제는 페더레이션된 데이터 소스와 Amazon S3 데이터 소스의 데이터를 결합하는 order_summary
보기를 생성합니다. Athena에서 이미 생성된 페더레이션된 소스에서 보기는 person
및 profile
테이블을 사용합니다. Amazon S3에서 보기는 purchase
및 payment
테이블을 사용합니다. Amazon S3를 참조하기 위해 명령문에서는 awsdatacatalog
키워드를 사용합니다. 페더레이션된 데이터 소스는 정규화된 이름 구문, federated_source_name
.federated_source_database
.federated_source_table
을 사용합니다.
CREATE VIEW default.order_summary AS SELECT * FROM
federated_source_name
.federated_source_database
."person" p JOINfederated_source_name
.federated_source_database
."profile" pr ON pr.id = p.id JOIN awsdatacatalog.default.purchase i ON p.id = i.id JOIN awsdatacatalog.default.payment pay ON pay.id = p.id
추가 리소스
-
원래 소스와 분리되고 다중 사용자 모델에서 온디맨드 분석에 사용할 수 있는 페더레이션된 보기의 예제에 대해서는 AWS 빅 데이터 블로그의 Extend your data mesh with Amazon Athena and federated views
를 참조하세요. -
Athena에서 보기 작업에 대한 자세한 내용은 뷰 작업 섹션을 참조하세요.