es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

DynamoDB BatchGetItemRequest sin proporcionar una clave primaria

La tabla de AWS DynamoDB tiene:
– Cliente (Clave primaria),
– folderlocation (atributo no clave),
– script
name (atributo no clave)

Quiero recuperar registros utilizando los atributos Cliente y folder_location usando BatchGetItemRequest.

Pero estoy recibiendo el siguiente error:

Error al recuperar elementos.com.amazonaws.services.dynamodbv2.model.AmazonDynamoDBException: La clave proporcionada no coincide con el esquema (Service: AmazonDynamoDBv2; Código de estado: 400; Código de error: ValidationException;

¿Hay alguna forma de hacerlo solo con BatchGetItemRequest?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Basándose en el mensaje de error, parece que el elemento clave proporcionado en BatchGetItemRequest no coincide con el esquema de la tabla de DynamoDB que tiene el atributo Client como clave principal. Por lo tanto, no es posible recuperar registros utilizando los atributos Client y folder_location solo con BatchGetItemRequest.

    BatchGetItemRequest se utiliza para recuperar hasta 16 elementos de una o más tablas de DynamoDB utilizando sus claves principales. Para recuperar los registros utilizando los atributos Client y folder_location, debes utilizar la operación Query en su lugar. La operación Query se utiliza para buscar elementos basados en los valores de atributos que no son claves.

    Puedes utilizar la operación Query para recuperar registros por los atributos Client y folder_location utilizando el objeto AmazonDynamoDBClient en tu código. Aquí tienes un ejemplo de código:

    AmazonDynamoDBClient client = new AmazonDynamoDBClient();
    DynamoDB dynamoDB = new DynamoDB(client);
    
    String tableName = "NOMBRE_DE_LA_TABLA";
    
    HashMap<string, attributevalue=""> keyValues = new HashMap<>();
    keyValues.put(":clientVal", new AttributeValue().withS("NOMBRE_DEL_CLIENTE"));
    keyValues.put(":folderLocVal", new AttributeValue().withS("UBICACION_DE_LA_CARPETA"));
    
    Map<string, string=""> expressionAttributeNames = new HashMap<>();
    expressionAttributeNames.put("#loc", "folder_location");
    
    DynamoDBQueryExpression<record> queryExpression = new DynamoDBQueryExpression<record>()
        .withKeyConditionExpression("Client = :clientVal and #loc = :folderLocVal")
        .withExpressionAttributeValues(keyValues)
        .withExpressionAttributeNames(expressionAttributeNames);
    
    List<record> records = dynamoDBMapper.query(Record.class, queryExpression);
    

    En este ejemplo, reemplaza NOMBRE_DE_LA_TABLA por el nombre real de tu tabla de DynamoDB y NOMBRE_DEL_CLIENTE y UBICACION_DE_LA_CARPETA por los valores que deseas recuperar. La clase Record es la clase que representa los elementos en tu tabla de DynamoDB. La lista records contendrá los elementos que coincidan con la condición de consulta.</string,></string,>

Comments are closed.