

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon Athena を使用して SQL で Amazon DynamoDB テーブルをクエリする
<a name="query-amazon-dynamodb-tables-sql-amazon-athena"></a>

*Gavin Perrie、Ajit Ambike、Brad Yates、Amazon Web Services*

## 概要
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-summary"></a>

データに Amazon Simple Storage Service (Amazon S3) 以外のソースが含まれている場合は、フェデレーティッドクエリを使用して、それらのリレーショナルデータソース、非リレーショナルデータソース、オブジェクトデータソース、またはカスタムデータソースにアクセスできます。このパターンは、SQL データソースコネクタを使用して Amazon Athena から Amazon DynamoDB へのフェデレーティッドクエリアクセスを設定する方法を示しています。

このパターン使用して、次のことを行うことができます。
+ SQL を使用して DynamoDB テーブルをクエリします。
+ Athena でフェデレーティッド SQL クエリを実行し、DynamoDB テーブルをサポートされている他のデータソースに結合します。

## 前提条件と制限
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-prereqs"></a>

**前提条件**
+ DynamoDB テーブル。
+ Athena エンジンバージョン 2 を使用するように設定された Athena ワークグループ。手順については、[Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/engine-versions-changing.html)を参照してください。
+ `AthenaDynamoDBConnector` AWS Lambda 関数がデータをスピルできる S3 バケット。S3 バケットと Lambda 関数は、同じ AWS リージョンに存在する必要があります。

Athena に初めてアクセスする場合は、クエリ結果の場所として使用する追加の S3 バケットが必要です。手順については、[Athena ドキュメント](https://docs.aws.amazon.com/athena/latest/ug/querying.html#query-results-specify-location-console)を参照してください。

**制限事項**
+ [INSERT INTO](https://docs.aws.amazon.com/athena/latest/ug/insert-into.html) などの書き込みオペレーションはサポートされていません。** **

**製品バージョン**
+ [GitHub での Athena クエリフェデレーションのリリース](https://github.com/awslabs/aws-athena-query-federation/releases)

## アーキテクチャ
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-architecture"></a>

**ターゲットアーキテクチャ**

次の図は、パターンが確立された後の接続フローを示しています。ユーザーは Amazon Athena に接続してクエリを提供します。Athena はクエリとターゲットを DynamoDB データソースコネクタ Lambda 関数に渡します。Lambda 関数はデータを取得して Athena に返します。大量のデータが返された場合、Athena は一時的な結果をスピルバケットに保存してから、データセット全体をパッケージ化して返します。

![ユーザーから Athena、Athena から Lambda へのワークフロー。S3 バケットと DynamoDB テーブルに接続します。](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/images/pattern-img/9d1ee529-36f3-4c7e-a2e7-05b76e09a3d8/images/e50a00cf-a55a-4def-81d5-4d2755dc9a97.png)


## ツール
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-tools"></a>

**AWS のサービス**
+ [Amazon Athena](https://docs.aws.amazon.com/athena/latest/ug/what-is.html)は、標準 SQL を使用して Amazon Simple Storage Service (Amazon S3) 内のデータを直接分析できるようにするインタラクティブなクエリサービスです。このパターンでは、[Amazon Athena クエリフェデレーション SDK を使用して構築され、 を介してアプリケーションとしてインストールされたツールである Amazon Athena DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb) を使用します AWS Serverless Application Repository。 Amazon Athena AWS Lambda 
+ [Amazon DynamoDB](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Introduction.html) は、フルマネージド NoSQL データベースサービスです。高速かつ予測可能でスケーラブルなパフォーマンスを提供します。
+ [AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/welcome.html) は、サーバーのプロビジョニングや管理を行うことなくコードを実行できるコンピューティングサービスです。必要に応じてコードを実行し、自動的にスケーリングするため、課金は実際に使用したコンピューティング時間に対してのみ発生します。
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/userguide/Welcome.html) は、あらゆる量のデータを保存、保護、取得できるクラウドベースのオブジェクトストレージサービスです。

**コードリポジトリ**

このパターンのコードは GitHub 内の「[Athena クエリフェデレーション](https://github.com/awslabs/aws-athena-query-federation/releases)」リポジトリで利用できます。

## エピック
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-epics"></a>

### DynamoDB データソースコネクタのセットアップとテスト
<a name="set-up-and-test-the-ddb-data-source-connector"></a>


| タスク | 説明 | 必要なスキル | 
| --- | --- | --- | 
| AthenaDynamoDBConnector アプリケーションをデプロイします。 | AthenaDynamoDBConnecter をデプロイするには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/query-amazon-dynamodb-tables-sql-amazon-athena.html) | AWS DevOps | 
| Athena 用のデータソースを作成します。 | データソースを作成するには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/query-amazon-dynamodb-tables-sql-amazon-athena.html) | AWS DevOps | 
| Athena を使用して DynamoDB テーブルをクエリします。 | DynamoDB テーブルをクエリするには、以下を実行します。[See the AWS documentation website for more details](http://docs.aws.amazon.com/ja_jp/prescriptive-guidance/latest/patterns/query-amazon-dynamodb-tables-sql-amazon-athena.html) | アプリデベロッパー | 

## トラブルシューティング
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-troubleshooting"></a>


| 問題 | ソリューション | 
| --- | --- | 
| クエリは `GENERIC_INTERNAL_ERROR: The bucket is in this region: <region>` で失敗します*。* | Athena スピルバケットと Lambda 関数が同じ AWS リージョンに作成されていることを確認します。 | 
| 新しく作成されたデータソースは Athena コンソールに表示されません。 | Athena データカタログはリージョン別です。`AthenaDynamoDBConnector` が Athena を使用しようとしているリージョンにデプロイされていることを確認します。 | 
| 新しく作成されたデータソースに対してクエリを実行できません。 | **クエリ結果の場所**が設定されていることを確認します。 | 

## 関連リソース
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-resources"></a>
+ [Amazon Athena DynamoDB コネクタ](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)
+ [Amazon Athena フェデレーティッドクエリ](https://docs.aws.amazon.com/athena/latest/ug/connect-to-a-data-source.html)