

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 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 工作群組設定為使用 Athena 引擎版本 2。如需說明，請參閱 [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)

## Architecture
<a name="query-amazon-dynamodb-tables-sql-amazon-athena-architecture"></a>

**目標架構**

下圖顯示建立模式後的連線流程。使用者連線到 Amazon Athena 以提供查詢。Athena 會將查詢和目標傳遞至 DynamoDB 資料來源連接器 Lambda 函數，該函數會擷取資料並將其傳回給 Athena。如果傳回大量資料，Athena 會在封裝和傳回完整資料集之前，將暫時結果存放在溢出儲存貯體中。

![從使用者到 Athena 到 Lambda 的工作流程，這會連線至 S3 儲存貯體和 DynamoDB 資料表。](http://docs.aws.amazon.com/zh_tw/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 DynamoDB Connector](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-dynamodb)，這是一種使用 Amazon Athena Query Federation SDK 建置並透過 安裝為 AWS Lambda 應用程式的工具 AWS Serverless Application Repository。
+ [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>


| 任務 | Description | 所需的技能 | 
| --- | --- | --- | 
| 部署 AthenaDynamoDBConnector 應用程式。 | 若要部署 AthenaDynamoDBConnecter，請執行下列動作：[See the AWS documentation website for more details](http://docs.aws.amazon.com/zh_tw/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/zh_tw/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/zh_tw/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)