本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用 Athena 存取、查詢和聯結 Amazon DynamoDB 資料表
由 Moinul Al-Mamun (AWS) 建立
Summary
此模式說明如何使用 Amazon Athena DynamoDB 連接器設定 Amazon Athena 和 Amazon DynamoDB 之間的連線。連接器使用 AWS Lambda 函數來查詢 DynamoDB 中的資料。您不需要撰寫任何程式碼來設定連線。建立連線後,您可以使用 Athena 聯合查詢從 Athena 執行 SQL 命令,快速存取和分析 DynamoDB 資料表。您也可以將一或多個 DynamoDB 資料表加入彼此或其他資料來源,例如 Amazon Redshift 或 Amazon Aurora。
先決條件和限制
先決條件
具備管理 DynamoDB 資料表、Athena 資料來源、Lambda 和 AWS Identity and Access Management (IAM) 角色許可的作用中 AWS 帳戶
Amazon Simple Storage Service (Amazon S3) 儲存貯體,其中 Athena 可以存放查詢結果
Athena DynamoDB Connector 可在其中短期儲存資料的 S3 儲存貯體
支援 Athena 引擎第 2 版的 AWS 區域
存取 Athena 和所需 S3 儲存貯體的 IAM 許可
限制
查詢 DynamoDB 資料表需要付費。超過幾 GB (GBs資料表大小可能會產生高成本。建議您在執行任何完整資料表 SCAN 操作之前考慮成本。如需詳細資訊,請參閱 Amazon DynamoDBSELECT * FROM table1 LIMIT 10
)。此外,在生產環境中執行 JOIN 或 GROUP BY 查詢之前,請考慮資料表的大小。如果您的資料表太大,請考慮其他選項,例如將資料表遷移至 Amazon S3
架構
下圖顯示使用者如何從 Athena 在 DynamoDB 資料表上執行 SQL 查詢。

該圖顯示以下工作流程:
若要查詢 DynamoDB 資料表,使用者會從 Athena 執行 SQL 查詢。
Athena 啟動 Lambda 函數。
Lambda 函數會在 DynamoDB 資料表中查詢請求的資料。
DynamoDB 會將請求的資料傳回 Lambda 函數。然後,函數會透過 Athena 將查詢結果傳輸給使用者。
Lambda 函數會將資料存放在 S3 儲存貯體中。
技術堆疊
Amazon Athena
Amazon DynamoDB
Amazon S3
AWS Lambda
工具
Amazon Athena 是一種互動式查詢服務,可協助您使用標準 SQL 直接分析 Amazon S3 中的資料。
Amazon Athena DynamoDB Connector
是一種 AWS 工具,可讓 Athena 與 DynamoDB 連線,並使用 SQL 查詢存取您的資料表。 Amazon DynamoDB 是一項全受管 NoSQL 資料庫服務,可提供快速、可預期且可擴展的效能。
AWS Lambda 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。
史詩
任務 | 描述 | 所需的技能 |
---|---|---|
建立第一個範例資料表。 |
| 開發人員 |
將範例資料插入第一個資料表。 |
| 開發人員 |
建立第二個範例資料表。 |
| 開發人員 |
將範例資料插入第二個資料表。 |
| 開發人員 |
任務 | 描述 | 所需的技能 |
---|---|---|
設定資料來源連接器。 | 建立 DynamoDB 的資料來源,然後建立 Lambda 函數以連線至該資料來源。
| 開發人員 |
確認 Lambda 函數可以存取 S3 溢出儲存貯體。 |
如果您遇到錯誤,請參閱此模式中的其他資訊一節以取得指引。 | 開發人員 |
任務 | 描述 | 所需的技能 |
---|---|---|
查詢 DynamoDB 資料表。 |
| 開發人員 |
加入兩個 DynamoDB 資料表。 | DynamoDB 是 NoSQL 資料存放區,不支援 SQL 聯結操作。因此,您必須在兩個 DynamoDB 資料表上執行聯結操作:
| 開發人員 |
相關資源
Amazon Athena DynamoDB Connector
(AWS 實驗室) 使用 Amazon Athena 的新聯合查詢查詢任何資料來源
(AWS 大數據部落格) Athena 引擎版本參考 (Athena 使用者指南)
使用 AWS Glue 和 Amazon Athena 簡化 Amazon DynamoDB 資料擷取和分析
(AWS 資料庫部落格)
其他資訊
如果您在 Athena 中使用 {bucket_name}/folder_name/
格式spill_bucket
的 執行查詢,則會收到下列錯誤訊息:
"GENERIC_USER_ERROR: Encountered an exception[java.lang.RuntimeException] from your LambdaFunction[arn:aws:lambda:us-east-1:xxxxxx:function:testdynamodb] executed in context[retrieving meta-data] with message[You do NOT own the spill bucket with the name: s3://amzn-s3-demo-bucket/athena_dynamodb_spill_data/]
This query ran against the "default" database, unless qualified by the query. Please post the error message on our forum or contact customer support with Query Id: [query-id]"
若要解決此錯誤,請將 Lambda 函數的環境變數更新spill_bucket
為 {bucket_name_only}
,然後更新下列儲存貯體寫入存取的 Lambda IAM 政策:
{
"Action": [
"s3:GetObject",
"s3:ListBucket",
"s3:GetBucketLocation",
"s3:GetObjectVersion",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetLifecycleConfiguration",
"s3:PutLifecycleConfiguration",
"s3:DeleteObject"
],
"Resource": [
"arn:aws:s3:::spill_bucket",
"arn:aws:s3:::spill_bucket/*"
],
"Effect": "Allow"
}
或者,您可以移除先前建立的 Athena 資料來源連接器,並僅使用 {bucket_name}
重新建立spill_bucket
。