跳至內容

如何對 DynamoDB 中的 "provided key element does not match the schema" 錯誤進行疑難排解?

1 分的閱讀內容
0

當我嘗試對 Amazon DynamoDB 表執行 GetItem 請求時,出現以下錯誤:"provided key element does not match the schema"。

簡短說明

出現此錯誤的原因如下:

  • 您為索引鍵指定了錯誤的資料類型。
  • 您的屬性命名錯誤。
  • 您僅指定了一部分索引鍵。
  • 資料寫入錯誤的資料表。
  • 存在不必要的額外索引鍵。
  • 您執行 GetItem 請求來嘗試取得一系列項目,而不是單一項目。
  • 您的資料表使用的是複合主鍵,且您在執行 GetItem 請求時,未指定分割索引鍵和排序索引鍵。
  • 您的資料表沒有排序索引鍵,且在執行 GetItem 請求時,只指定了分割索引鍵。

解決方法

檢查主索引鍵和排序索引鍵資料類型

為了讓您的 GetItem 命令成功執行,主索引鍵資料和排序索引鍵資料必須與 DynamoDB 表的資料具有相同的資料類型。在以下範例命令中,排序索引鍵 Year 具有字串 (S) 資料類型:

aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"S":"2024"}}'

由於該資料表使用數字 (N) 資料類型,因此您會收到以下錯誤訊息:

"An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema"

請改為執行以下使用數字資料類型的命令:

aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"N":"2024"}}'

您會看到類似下方所顯示的輸出內容:

{
    "Item": {
        "EventID": {
            "S": "test-item01"
        },
        "Year": {
            "N": "2024"
        },
        "Works?": {
            "N": "1"
        }
    }
}

為您的使用案例選擇作業

使用 BatchGetItem 或 GetItem 作業

從 DynamoDB 表中擷取資料時,您可以使用 GetitemBatchGetitem 作業。GetItem 作業每次擷取一筆記錄。請求必須包含資料表的索引鍵結構描述

BatchGetItem 作業會要求您為僅具有分割索引鍵的資料表提供分割索引鍵。對於具有複合主鍵的資料表,使用 BatchGetItem 時必須提供分割索引鍵和排序索引鍵。

使用查詢作業

若要在未指定排序索引鍵的情況下擷取資料,請使用 Query 作業。由於 Query 可讓您在擷取資料時僅指定分割索引鍵,因此請對具有複合主鍵的資料表使用此作業。

使用 DynamoDB 掃描 API

若要根據非索引鍵屬性搜尋資料,請使用 DynamoDB Scan API。透過 Scan 作業,您可以使用 FilterExpression 根據任何屬性篩選資料,而無需指定主索引鍵。

若要使用非索引鍵屬性搜尋資料,請在 FilterExpression 中使用巢狀搜尋。例如,若要搜尋在巢狀 Data 屬性中具有 userId 屬性且符合特定值的項目,請使用下表達式:

"Data.userId":your_expression_values."

**重要:**由於 Scan 作業會迭代所有項目來檢查是否符合篩選條件,因此此作業可能會迅速產生費用。如果您必須使用 Scan 作業,請在掃描大型資料表時新增分頁。Scan API 每次呼叫只會傳回最多 1 MB 的資料。使用分頁來只掃描新資料。

AWS 官方已更新 2 年前