Quando tento executar uma solicitação GetItem em minha tabela do Amazon DynamoDB, recebo o seguinte erro: "provided key element does not match the schema".
Breve descrição
Este erro pode ocorrer pelos seguintes motivos:
- Você especificou o tipo de dados incorreto da chave.
- Você nomeou atributos incorretamente.
- Você especificou somente parte de uma chave.
- Os dados estão sendo gravados na tabela errada.
- Há uma chave adicional desnecessária.
- Você executou uma solicitação GetItem para tentar obter uma variedade de itens em vez de um único item.
- Sua tabela tem uma chave primária composta, então você executa uma solicitação GetItem e não especifica a chave de partição e a chave de classificação.
- Sua tabela não tem uma chave de classificação, então você executa uma solicitação GetItem e especifica somente uma chave de partição.
Resolução
Revisar a chave primária e classificar o tipo de dados da chave
Para que o comando GetItem seja bem-sucedido, os dados da chave primária e de classificação devem ser do mesmo tipo dos dados da tabela do DynamoDB. No comando de exemplo a seguir, a chave de classificação Year tem um tipo de dados de string (S):
aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"S":"2024"}}'
Como a tabela usa um tipo de dados numérico (N), você recebe a seguinte mensagem de erro:
"An error occurred (ValidationException) when calling the GetItem operation: The provided key element does not match the schema"
Em vez disso, execute o seguinte comando que usa o tipo de dados numérico:
aws dynamodb get-item --table-name Key-Element --key '{"EventID":{"S":"test-item01"}, "Year":{"N":"2024"}}'
Você recebe uma saída semelhante à seguinte:
{
"Item": {
"EventID": {
"S": "test-item01"
},
"Year": {
"N": "2024"
},
"Works?": {
"N": "1"
}
}
}
Escolha uma operação para seu caso de uso
Usar a operação BatchGetItem ou GetItem
Ao recuperar dados das suas tabelas do DynamoDB, você pode usar as operações Getitem ou BatchGetitem. A operação GetItem recupera um registro por vez. A solicitação deve incluir o esquema de chaves da tabela.
A operação BatchGetItem exige que você forneça a chave de partição para tabelas que tenham somente uma chave de partição. Para tabelas que têm uma chave primária composta, você deve fornecer a partição e a chave de classificação ao usar BatchGetItem.
Usar a operação Query
Para recuperar dados quando você não especifica uma chave de classificação, use a operação Query. Como Query permite especificar somente a chave de partição ao recuperar dados, use essa operação para tabelas com uma chave primária composta.
Usar a API DynamoDB Scan
Para pesquisar dados com base em um atributo não chave, use a API DynamoDB Scan. A operação Scan permite que você use FilterExpression para filtrar dados com base em qualquer atributo sem a necessidade de especificar a chave primária.
Para usar um atributo não chave para pesquisar dados, use uma pesquisa aninhada em FilterExpression. Por exemplo, para pesquisar itens que tenham um atributo userId no atributo Data aninhado que corresponda a um valor específico, use a seguinte expressão:
"Data.userId": your_expression_values."
Importante: como a operação Scan repete todos os itens para verificar se a condição do filtro foi atendida, a operação pode gerar cobranças rapidamente. Se você precisar usar a operação Scan, adicione paginação ao digitalizar tabelas grandes. A API Scan retorna somente até 1 MB de dados por chamada. Use a paginação para digitalizar somente dados novos.