페더레이션 쿼리 사용 - Amazon Athena

페더레이션 쿼리 사용

하나 이상의 데이터 커넥터를 구성하여 계정에 배포한 후 Athena 쿼리에 사용할 수 있습니다.

단일 데이터 소스 쿼리

이 섹션의 예제에서는 Amazon Athena CloudWatch 커넥터를 구성하여 계정에 배포했다고 가정합니다. 다른 커넥터를 사용할 때 동일한 방법을 사용하여 쿼리합니다.

CloudWatch 커넥터를 사용하는 Athena 쿼리를 생성하려면
  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

  2. 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'

여러 데이터 소스 쿼리

좀 더 복잡한 예제로 다음 데이터 소스를 사용하여 고객 구매와 관련된 데이터를 저장하는 전자 상거래 회사를 가정합니다.

이 전자 상거래 애플리케이션의 데이터 분석가가 일부 지역의 배송 시간이 현지 기상 조건의 영향을 받았다는 사실을 알게 되었다고 가정합니다. 분석가는 지연된 주문 건수, 영향을 받는 고객의 위치, 영향을 가장 많이 받는 제품을 파악하려고 합니다. 분석가는 정보 소스를 개별적으로 조사하는 대신 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에서 이미 생성된 페더레이션된 소스에서 보기는 personprofile 테이블을 사용합니다. Amazon S3에서 보기는 purchasepayment 테이블을 사용합니다. 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 JOIN federated_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에서 보기 작업에 대한 자세한 내용은 뷰 작업 섹션을 참조하세요.