

# フェデレーティッドクエリを実行する
<a name="running-federated-queries"></a>

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

## 単一データソースをクエリする
<a name="running-federated-queries-single-data-source"></a>

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

**CloudWatch コネクタを使用する Athena クエリを作成する**

1. [https://console.aws.amazon.com/athena/](https://console.aws.amazon.com/athena/home) で Athena コンソールを開きます。

1. Athena クエリエディタで、`FROM` 句に次の構文を使用する SQL クエリを作成します。

   ```
   MyCloudwatchCatalog.database_name.table_name       
   ```

### 例
<a name="running-federated-queries-single-data-source-examples"></a>

以下の例では、`/var/ecommerce-engine/order-processor` CloudWatch Logs [ロググループ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html)の `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'
```

## 複数のデータソースをクエリする
<a name="running-federated-queries-multiple-sources"></a>

さらに複雑な例として、次のデータソースを使用して顧客の購入に関するデータを保存する電子商取引会社があると考えてみましょう。
+ 製品カタログデータを保存ための [Amazon RDS for MySQL](https://aws.amazon.com/rds/mysql/)
+ E メールアドレスや配送先住所などの顧客アカウントデータを保存するための [Amazon DocumentDB](https://aws.amazon.com/documentdb/)
+ 注文の発送と追跡データを保存するための [Amazon DynamoDB](https://aws.amazon.com/dynamodb/)

この電子商取引アプリケーションのデータアナリストが、一部の地域で地域の気象条件により配送時間に影響が出ていることを知ったとしましょう。アナリストは、遅延している注文の数や、影響を受けている顧客のいる場所、最も影響を受けている製品を知りたいと考えます。情報のソースを個別に調査することはせずに、アナリストは Athena を使用して、データを 1 つのフェデレーションクエリに結合します。

**Example**  

```
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
```

## フェデレーテッドビューをクエリする
<a name="running-federated-queries-federated-views"></a>

フェデレーションされたソースをクエリする場合、ビューを使用して基になるデータソースを難読化したり、データにクエリする他のアナリストに複雑な結合が表示されないようにすることができます。

### 考慮事項と制限事項
<a name="running-federated-queries-federated-views-considerations"></a>
+ フェデレーションされたビューには Athena バージョン 3 が必要です。
+ フェデレーションされたビューは、基になるデータソースではなく、AWS Glue に格納されます。
+ フェデレーティッドビューは、[Glue データカタログとして登録](register-connection-as-gdc.md)されているデータソースではサポートされていません。
+ フェデレーションされたカタログで作成されたビューでは、次の例にあるように、完全に修飾されている名前構文を使用する必要があります。

  ```
  "ddbcatalog"."default"."customers"
  ```
+ フェデレーションされたソースでクエリを実行するユーザーには、フェデレーションされたソースをクエリする権限が必要です。
+ フェデレーションされたビューには `athena:GetDataCatalog` 権限が必要です。詳細については、「[Athena Federated Query へのアクセスを許可する: ポリシーの例](federated-query-iam-access.md)」を参照してください。

### 例
<a name="running-federated-queries-federated-views-examples"></a>

次の例では、フェデレーションされたデータソースに保存されているデータに基づいて、`customers` と呼ばれるビューを作成しています。

**Example**  

```
CREATE VIEW customers AS
SELECT *
FROM my_federated_source.default.table
```

次のクエリ例は、基になるフェデレーションされたデータソースではなく、`customers` ビューを参照するクエリを示しています。

**Example**  

```
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\$1source\$1name*.*federated\$1source\$1database*.*federated\$1source\$1table* を使用していることに注目してください。

**Example**  

```
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
```

### その他のリソース
<a name="running-federated-queries-federated-views-additional-resources"></a>
+ 元のソースから分離され、マルチユーザーモデルでのオンデマンドの分析に使用できるフェデレーティッドビューの例については、*AWS Big Data Blog* の「[Extend your data mesh with Amazon Athena and federated views](https://aws.amazon.com/blogs/big-data/extend-your-data-mesh-with-amazon-athena-and-federated-views/)」を参照してください。
+ Athena のビューを使用するための詳細については、「[ビューを使用する](views.md)」を参照してください。