Dynamodb

如何在 DynamoDB 中按屬性搜尋?

  • May 15, 2021

我繼承了一個使用 DynamoDB 作為其數據庫的站點,不幸的是我對此一無所知,並且我正在嘗試為他們更改使用者的電子郵件。DynamoDB 中似乎有一個 users 表,但我不知道使用者的 id,只知道他們的使用者名和目前電子郵件,所以在這一點上,我只是想在更新之前找到記錄。當我嘗試在 Web 界面中掃描這些值時,我沒有得到任何結果;它只是不斷搜尋。如果我在 Web 界面中掃描我知道存在的電子郵件地址,我也沒有得到任何結果。

使用這些佔位符值,

Username: example
Email: example@example.com

我使用 AWS CLI 嘗試了一些命令,但出現了各種錯誤:

aws dynamodb get-item --table-name users --key '{"Username": {"S": "example"}}'

這會產生此錯誤:

Unknown options: example}}', {S:

我也試過這個:

aws dynamodb query --table-name users --key-condition-expression "Username = :v1" --expression-attribute-values "{ \":v1\" : { \"S\" : \"example\" } }"

這會產生此錯誤:

An error occurred (ValidationException) when calling the Query operation: Query condition missed key schema element: id

我也嘗試列印出所有使用者,但除了最小的表之外,它似乎都失敗了:

aws dynamodb scan --table-name users

這會產生此錯誤:

An error occurred (ProvisionedThroughputExceededException) when calling the Scan operation (reached max retries: 2): The level of configured provisioned throughput for the table was exceeded. Consider increasing your provisioning level with the UpdateTable API.

不知道此時該做什麼。有什麼建議嗎?

我聯繫了 AWS 支持,他們說了兩件事:

  1. 需要將表的讀/寫容量從“預置”更改為“按需”。
  2. 掃描絕對是這裡使用的命令,而不是查詢;query 需要 id,scan 不需要。
aws dynamodb scan --table-name users --filter-expression "Username = :v1" 
   --expression-attribute-values "{ \":v1\" : { \"S\" : \"example\" } }" 

聽起來好像只有關鍵全域二級索引可以在 DynamoDB 中有效地搜尋,這可以通過query()函式來完成,從我的簡要研究來看。老實說,我不是 DynamoDB 專家,過去只是讀過它,但這個StackOverflow 答案可能對您想要完成的工作有所幫助。本質上,它建議在您嘗試用於搜尋的欄位上創建一個全域二級索引。

引用自:https://dba.stackexchange.com/questions/284635