Saltar al contenido

¿Cómo soluciono el error "provided key element does not match the schema" en DynamoDB?

4 minutos de lectura
0

Cuando intento ejecutar una solicitud GetItem para mi tabla de Amazon DynamoDB, aparece el siguiente error: "provided key element does not match the schema".

Descripción corta

Este error puede producirse por los siguientes motivos:

  • Has especificado un tipo de datos incorrecto para la clave.
  • Has nombrado los atributos de forma incorrecta.
  • Has especificado solo una parte de una clave.
  • Los datos se escriben en la tabla incorrecta.
  • Hay una clave adicional innecesaria.
  • Ejecutas una solicitud GetItem para intentar obtener un rango de elementos en lugar de uno solo.
  • La tabla tiene una clave principal compuesta, por lo que se ejecuta una solicitud GetItem y no se especifican la clave de partición ni la clave de ordenación.
  • La tabla no tiene una clave de ordenación, por lo que debes ejecutar una solicitud GetItem y especificar solo una clave de partición.

Resolución

Revisión del tipo de datos de la clave principal y de ordenación

Para que el comando GetItem se ejecute correctamente, los datos de la clave principal y de ordenación deben ser del mismo tipo de datos que los datos de la tabla de DynamoDB. En el siguiente comando de ejemplo, la clave de ordenación Year tiene un tipo de datos de cadena (S):

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

Como la tabla usa un tipo de datos numérico (N), aparece el siguiente mensaje de error:

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

En su lugar, ejecuta el siguiente comando que usa el tipo de datos numérico:

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

Obtendrás un resultado similar al siguiente:

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

Elección de una operación para tu caso práctico

Uso de la operación BatchGetItem o GetItem

Al recuperar datos de las tablas de DynamoDB, puedes usar las operaciones Getitem o BatchGetitem. La operación GetItem recupera un registro cada vez. La solicitud debe incluir el esquema de claves de la tabla.

La operación BatchGetItem requiere que proporciones la clave de partición para las tablas que solo tienen una clave de partición. Para las tablas que tienen una clave principal compuesta, debes proporcionar la partición y la clave de ordenación cuando utilices BatchGetItem.

Uso de la operación de consulta

Para recuperar datos sin especificar una clave de ordenación, utiliza la operación de consulta. Como la consulta solo permite especificar la clave de partición al recuperar datos, utiliza esta operación para tablas con una clave principal compuesta.

Uso de la API de análisis de DynamoDB

Para buscar datos en función de un atributo que no sea clave, utiliza la API de análisis de DynamoDB. La operación de análisis te permite usar una FilterExpression para filtrar los datos en función de cualquier atributo sin necesidad de especificar la clave principal.

Para usar un atributo que no sea clave para buscar datos, usa una búsqueda anidada en FilterExpression. Por ejemplo, para buscar elementos que tengan un atributo userId en el atributo anidado Data que coincida con un valor específico, utiliza la siguiente expresión:

"Data.userId": your_expression_values».

Importante: Como la operación de análisis se repite en todos los elementos para comprobar si se cumple la condición del filtro, la operación puede generar cargos rápidamente. Si tienes que utilizar la operación de análisis, agrega paginación al analizar tablas grandes. La API de análisis solo devuelve hasta 1 MB de datos por llamada. Usa la paginación para analizar solo datos nuevos.

OFICIAL DE AWSActualizada hace un año