選取您的 Cookie 偏好設定

我們使用提供自身網站和服務所需的基本 Cookie 和類似工具。我們使用效能 Cookie 收集匿名統計資料,以便了解客戶如何使用我們的網站並進行改進。基本 Cookie 無法停用,但可以按一下「自訂」或「拒絕」以拒絕效能 Cookie。

如果您同意,AWS 與經核准的第三方也會使用 Cookie 提供實用的網站功能、記住您的偏好設定,並顯示相關內容,包括相關廣告。若要接受或拒絕所有非必要 Cookie,請按一下「接受」或「拒絕」。若要進行更詳細的選擇,請按一下「自訂」。

使用 Athena 存取、查詢和聯結 Amazon DynamoDB 資料表 - AWS 方案指引

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

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

使用 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 許可

  • Amazon Athena DynamoDB 連接器,已安裝

限制

查詢 DynamoDB 資料表需要付費。超過幾 GB (GBs資料表大小可能會產生高成本。建議您在執行任何完整資料表 SCAN 操作之前考慮成本。如需詳細資訊,請參閱 Amazon DynamoDB 定價。為了降低成本並實現高效能,我們建議您在查詢中一律使用 LIMIT (例如 SELECT * FROM table1 LIMIT 10)。此外,在生產環境中執行 JOIN 或 GROUP BY 查詢之前,請考慮資料表的大小。如果您的資料表太大,請考慮其他選項,例如將資料表遷移至 Amazon S3

架構

下圖顯示使用者如何從 Athena 在 DynamoDB 資料表上執行 SQL 查詢。

用於連接 Athena 和 DynamoDB 以執行 SQL 查詢的工作流程。

該圖顯示以下工作流程:

  1. 若要查詢 DynamoDB 資料表,使用者會從 Athena 執行 SQL 查詢。

  2. Athena 啟動 Lambda 函數。

  3. Lambda 函數會在 DynamoDB 資料表中查詢請求的資料。

  4. DynamoDB 會將請求的資料傳回 Lambda 函數。然後,函數會透過 Athena 將查詢結果傳輸給使用者。

  5. 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 是一種運算服務,可協助您執行程式碼,而不需要佈建或管理伺服器。它只會在需要時執行程式碼並自動擴展,因此您只需支付您使用的運算時間。

史詩

任務描述所需的技能

建立第一個範例資料表。

  1. 登入 AWS 管理主控台並開啟 DynamoDB 主控台

  2. 選擇建立資料表

  3. 針對資料表名稱,輸入 dydbtable1

  4. 對於分割區索引鍵輸入 PK1

  5. 針對排序索引鍵,輸入 SK1

  6. 資料表設定區段中,選擇自訂設定

  7. 資料表類別區段中,選擇 DynamoDB Standard

  8. 讀取/寫入容量設定區段中,對於容量模式,選擇隨需

  9. 靜態加密區段中,選擇 Amazon DynamoDB 擁有

  10. 選擇建立資料表

開發人員

將範例資料插入第一個資料表。

  1. 開啟 DynamoDB 主控台

  2. 在導覽窗格中,選擇資料表,然後在名稱欄中選擇您的資料表。

  3. 選擇動作,然後選擇建立項目

  4. 選擇 JSON 檢視

  5. 屬性編輯器的標題列中,關閉檢視 DynamoDB JSON

  6. 屬性編輯器中,逐一輸入下列範例資料:

{ "PK1": "1234", "SK1": "info", "Salary": "5000" }
{ "PK1": "1235", "SK1": "info", "Salary": "5200" }
開發人員

建立第二個範例資料表。

  1. 開啟 DynamoDB 主控台

  2. 選擇建立資料表

  3. 對於資料表名稱,輸入 dydbtable2

  4. 針對分割區金鑰,輸入 PK2

  5. 針對排序索引鍵,輸入 SK2

  6. 資料表設定區段中,選擇自訂設定

  7. 資料表類別區段中,選擇 DynamoDB Standard

  8. 讀取/寫入容量設定區段中,對於容量模式,選擇隨需

  9. 靜態加密區段中,選擇 Amazon DynamoDB 擁有

  10. 選擇建立資料表

開發人員

將範例資料插入第二個資料表。

  1. 開啟 DynamoDB 主控台

  2. 在導覽窗格中,選擇資料表,然後在名稱欄中選擇您的資料表。

  3. 選擇動作,然後選擇建立項目

  4. 屬性編輯器的標題列中,關閉檢視 DynamoDB JSON

  5. 屬性編輯器中,逐一輸入下列範例資料:

{ "PK2": "1234", "SK2": "bonus", "Bonus": "500" }
{ "PK2": "1235", "SK2": "bonus", "Bonus": "1000" }
開發人員

建立範例 DynamoDB 資料表

任務描述所需的技能

建立第一個範例資料表。

  1. 登入 AWS 管理主控台並開啟 DynamoDB 主控台

  2. 選擇建立資料表

  3. 針對資料表名稱,輸入 dydbtable1

  4. 對於分割區索引鍵輸入 PK1

  5. 針對排序索引鍵,輸入 SK1

  6. 資料表設定區段中,選擇自訂設定

  7. 資料表類別區段中,選擇 DynamoDB Standard

  8. 讀取/寫入容量設定區段中,對於容量模式,選擇隨需

  9. 靜態加密區段中,選擇 Amazon DynamoDB 擁有

  10. 選擇建立資料表

開發人員

將範例資料插入第一個資料表。

  1. 開啟 DynamoDB 主控台

  2. 在導覽窗格中,選擇資料表,然後在名稱欄中選擇您的資料表。

  3. 選擇動作,然後選擇建立項目

  4. 選擇 JSON 檢視

  5. 屬性編輯器的標題列中,關閉檢視 DynamoDB JSON

  6. 屬性編輯器中,逐一輸入下列範例資料:

{ "PK1": "1234", "SK1": "info", "Salary": "5000" }
{ "PK1": "1235", "SK1": "info", "Salary": "5200" }
開發人員

建立第二個範例資料表。

  1. 開啟 DynamoDB 主控台

  2. 選擇建立資料表

  3. 對於資料表名稱,輸入 dydbtable2

  4. 針對分割區金鑰,輸入 PK2

  5. 針對排序索引鍵,輸入 SK2

  6. 資料表設定區段中,選擇自訂設定

  7. 資料表類別區段中,選擇 DynamoDB Standard

  8. 讀取/寫入容量設定區段中,對於容量模式,選擇隨需

  9. 靜態加密區段中,選擇 Amazon DynamoDB 擁有

  10. 選擇建立資料表

開發人員

將範例資料插入第二個資料表。

  1. 開啟 DynamoDB 主控台

  2. 在導覽窗格中,選擇資料表,然後在名稱欄中選擇您的資料表。

  3. 選擇動作,然後選擇建立項目

  4. 屬性編輯器的標題列中,關閉檢視 DynamoDB JSON

  5. 屬性編輯器中,逐一輸入下列範例資料:

{ "PK2": "1234", "SK2": "bonus", "Bonus": "500" }
{ "PK2": "1235", "SK2": "bonus", "Bonus": "1000" }
開發人員
任務描述所需的技能

設定資料來源連接器。

建立 DynamoDB 的資料來源,然後建立 Lambda 函數以連線至該資料來源。

  1. 登入 AWS 管理主控台並開啟 Athena 主控台

  2. 在導覽窗格中,選擇資料來源,然後選擇建立資料來源

  3. 選擇 Amazon DynamoDB 資料來源,然後選擇下一步

  4. 資料來源詳細資訊區段中,針對資料來源名稱輸入 testDynamoDB

  5. 連線詳細資訊區段中,選取已部署的 Lambda 函數,或者如果您沒有可用於此模式的 Lambda 函數,請選擇建立 Lambda 函數。注意:如需建立 Lambda 函數的詳細資訊,請參閱 Lambda 開發人員指南中的 Lambda 入門

  6. (選用) 如果您選擇建立 Lambda 函數,則必須在部署堆疊之前設定 Java 應用程式包含的 AWS CloudFormation 範本。範本包含 ApplicationName、SpillBucket、AthenaCatalogName 和其他應用程式設定。注意:部署此 Java 型應用程式之後,堆疊會建立 Lambda 函數,讓 Athena 能夠與 DynamoDB 通訊。這可讓您的資料表透過 SQL 命令存取。

  7. 部署您的 Lambda 函數。

  8. 選擇 Next (下一步)

開發人員

確認 Lambda 函數可以存取 S3 溢出儲存貯體。

  1. 開啟 Lambda 主控台

  2. 在導覽窗格中,選擇函數,然後選擇您先前建立的函數。

  3. 選擇 Configuration (組態) 索引標籤。

  4. 在左側窗格中,選擇環境變數,然後確認金鑰的值為 spill_bucket

  5. 在左側窗格中,選擇許可,然後在執行角色區段中,選擇連接的 IAM 角色。注意:系統會將您導向至 IAM 主控台中連接至 Lambda 函數的 IAM 角色。

  6. 確認您擁有儲存spill_bucket貯體的寫入許可。

如果您遇到錯誤,請參閱此模式中的其他資訊一節以取得指引。

開發人員

在 Athena for DynamoDB 中建立資料來源

任務描述所需的技能

設定資料來源連接器。

建立 DynamoDB 的資料來源,然後建立 Lambda 函數以連線至該資料來源。

  1. 登入 AWS 管理主控台並開啟 Athena 主控台

  2. 在導覽窗格中,選擇資料來源,然後選擇建立資料來源

  3. 選擇 Amazon DynamoDB 資料來源,然後選擇下一步

  4. 資料來源詳細資訊區段中,針對資料來源名稱輸入 testDynamoDB

  5. 連線詳細資訊區段中,選取已部署的 Lambda 函數,或者如果您沒有可用於此模式的 Lambda 函數,請選擇建立 Lambda 函數。注意:如需建立 Lambda 函數的詳細資訊,請參閱 Lambda 開發人員指南中的 Lambda 入門

  6. (選用) 如果您選擇建立 Lambda 函數,則必須在部署堆疊之前設定 Java 應用程式包含的 AWS CloudFormation 範本。範本包含 ApplicationName、SpillBucket、AthenaCatalogName 和其他應用程式設定。注意:部署此 Java 型應用程式之後,堆疊會建立 Lambda 函數,讓 Athena 能夠與 DynamoDB 通訊。這可讓您的資料表透過 SQL 命令存取。

  7. 部署您的 Lambda 函數。

  8. 選擇 Next (下一步)

開發人員

確認 Lambda 函數可以存取 S3 溢出儲存貯體。

  1. 開啟 Lambda 主控台

  2. 在導覽窗格中,選擇函數,然後選擇您先前建立的函數。

  3. 選擇 Configuration (組態) 索引標籤。

  4. 在左側窗格中,選擇環境變數,然後確認金鑰的值為 spill_bucket

  5. 在左側窗格中,選擇許可,然後在執行角色區段中,選擇連接的 IAM 角色。注意:系統會將您導向至 IAM 主控台中連接至 Lambda 函數的 IAM 角色。

  6. 確認您擁有儲存spill_bucket貯體的寫入許可。

如果您遇到錯誤,請參閱此模式中的其他資訊一節以取得指引。

開發人員
任務描述所需的技能

查詢 DynamoDB 資料表。

  1. 登入 AWS 管理主控台並開啟 Athena 主控台

  2. 在導覽窗格中,選擇資料來源,然後選擇建立資料來源

  3. 在導覽窗格中,選擇 Query Editor (查詢編輯器)

  4. 編輯器索引標籤的資料來源區段中,選擇資料來源的資料來源

  5. 如需資料庫,請選擇您的資料庫。

  6. 針對查詢 1,輸入下列查詢: SELECT * FROM dydbtable1 t1;

  7. 選擇執行,然後驗證資料表中的輸出。

  8. 針對查詢 2,輸入下列查詢: SELECT * FROM dydbtable2 t2;

  9. 選擇執行,然後驗證資料表中的輸出。

開發人員

加入兩個 DynamoDB 資料表。

DynamoDB 是 NoSQL 資料存放區,不支援 SQL 聯結操作。因此,您必須在兩個 DynamoDB 資料表上執行聯結操作:

  1. 選擇加號圖示以建立另一個查詢。

  2. 針對查詢 3,輸入下列查詢:

SELECT pk1, salary, bonus FROM dydbtable1 t1 JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;
開發人員

從 Athena 存取 DynamoDB 資料表

任務描述所需的技能

查詢 DynamoDB 資料表。

  1. 登入 AWS 管理主控台並開啟 Athena 主控台

  2. 在導覽窗格中,選擇資料來源,然後選擇建立資料來源

  3. 在導覽窗格中,選擇 Query Editor (查詢編輯器)

  4. 編輯器索引標籤的資料來源區段中,選擇資料來源的資料來源

  5. 如需資料庫,請選擇您的資料庫。

  6. 針對查詢 1,輸入下列查詢: SELECT * FROM dydbtable1 t1;

  7. 選擇執行,然後驗證資料表中的輸出。

  8. 針對查詢 2,輸入下列查詢: SELECT * FROM dydbtable2 t2;

  9. 選擇執行,然後驗證資料表中的輸出。

開發人員

加入兩個 DynamoDB 資料表。

DynamoDB 是 NoSQL 資料存放區,不支援 SQL 聯結操作。因此,您必須在兩個 DynamoDB 資料表上執行聯結操作:

  1. 選擇加號圖示以建立另一個查詢。

  2. 針對查詢 3,輸入下列查詢:

SELECT pk1, salary, bonus FROM dydbtable1 t1 JOIN dydbtable2 t2 ON t1.pk1 = t2.pk2;
開發人員

相關資源

其他資訊

如果您在 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

隱私權網站條款Cookie 偏好設定
© 2025, Amazon Web Services, Inc.或其附屬公司。保留所有權利。