フェデレーティッドクエリを実行する
1 つ、または複数のデータコネクタを設定してアカウントにデプロイしたら、それらを Athena クエリで使用できます。
単一データソースをクエリする
このセクションの例では、Amazon Athena CloudWatch コネクタ が構成され、アカウントにデプロイされていることを前提としています。他のコネクタを使用する場合も、同じ方法でクエリを実行します。
CloudWatch コネクタを使用する Athena クエリを作成する
https://console.aws.amazon.com/athena/
で Athena コンソールを開きます。 -
Athena クエリエディタで、
FROM
句に次の構文を使用する SQL クエリを作成します。MyCloudwatchCatalog
.database_name
.table_name
例
以下の例では、/var/ecommerce-engine/order-processor
CloudWatch Logs ロググループの all_log_streams
ビューへの接続に Athena CloudWatch コネクタを使用します。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
-
E メールアドレスや配送先住所などの顧客アカウントデータを保存するための Amazon DocumentDB
-
注文の発送と追跡データを保存するための Amazon DynamoDB
この電子商取引アプリケーションのデータアナリストが、一部の地域で地域の気象条件により配送時間に影響が出ていることを知ったとしましょう。アナリストは、遅延している注文の数や、影響を受けている顧客のいる場所、最も影響を受けている製品を知りたいと考えます。情報のソースを個別に調査することはせずに、アナリストは Athena を使用して、データを 1 つのフェデレーションクエリに結合します。
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 に格納されます。
-
フェデレーティッドビューは、Glue データカタログとして登録されているデータソースではサポートされていません。
-
フェデレーションされたカタログで作成されたビューでは、次の例にあるように、完全に修飾されている名前構文を使用する必要があります。
"ddbcatalog"."default"."customers"
-
フェデレーションされたソースでクエリを実行するユーザーには、フェデレーションされたソースをクエリする権限が必要です。
-
フェデレーションされたビューには
athena:GetDataCatalog
権限が必要です。詳細については、「Athena Federated Query へのアクセスを許可する: ポリシーの例 」を参照してください。
例
次の例では、フェデレーションされたデータソースに保存されているデータに基づいて、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 Big Data Blog の「Extend your data mesh with Amazon Athena and federated views
」を参照してください。 -
Athena のビューを使用するための詳細については、「ビューを使用する」を参照してください。