フェデレーティッドクエリの実行 - Amazon Athena

フェデレーティッドクエリの実行

1 つ、または複数のデータコネクタを設定してアカウントにデプロイしたら、それらを Athena クエリで使用できます。

単一データソースのクエリ

このセクションの例では、Amazon Athena CloudWatch コネクタ が構成され、アカウントにデプロイされていることを前提としています。他のコネクタを使用する場合も、同じ方法でクエリを実行します。

CloudWatch コネクタを使用する Athena クエリを作成する
  1. https://console.aws.amazon.com/athena/ で Athena コンソールを開きます。

  2. 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 に格納されます。

  • フェデレーションされたカタログで作成されたビューでは、次の例にあるように、完全に修飾されている名前構文を使用する必要があります。

    "ddbcatalog"."default"."customers"
  • フェデレーションされたソースでクエリを実行するユーザーには、フェデレーションされたソースをクエリする権限が必要です。

  • フェデレーションされたビューには athena:GetDataCatalog 権限が必要です。詳細については、「Athena Federated Query を許可する IAM 許可ポリシーの例」を参照してください。

次の例では、フェデレーションされたデータソースに保存されているデータに基づいて、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 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 Big Data Blog の「Extend your data mesh with Amazon Athena and federated views」を参照してください。

  • Athena のビューを使用するための詳細については、「ビューの使用」を参照してください。