Expresiones de condición clave para la operación Query - Amazon DynamoDB

Expresiones de condición clave para la operación Query

Para especificar los criterios de búsqueda, se utiliza una expresión de condición de clave; se trata de una cadena que determina los elementos que se van a leer en la tabla o el índice.

Debe especificar el nombre y valor de la clave de partición como una condición de igualdad. No puede utilizar un atributo no clave en una expresión de condición clave.

Si lo desea, puede proporcionar una segunda condición para la clave de ordenación (en caso de incluirse). En la condición de clave de ordenación se debe utilizar uno de los siguientes operadores de comparación:

  • a = b: es true si el atributo a es igual al valor b.

  • a < b: es true si a es menor que b.

  • a <= b: es true si a es menor o igual que b.

  • a > b: es true si a es mayor que b.

  • a >= b: es true si a es mayor o igual que b.

  • a BETWEEN b AND c: es true si a es mayor o igual que b y menor o igual que c.

También se admite la siguiente función:

  • begins_with (a, substr): es true si el valor del atributo a comienza por una subcadena determinada.

En los siguientes ejemplos de la AWS Command Line Interface (AWS CLI) se muestra el uso de expresiones de condición de clave. Estas expresiones utilizan marcadores de posición (como :name y :sub) en lugar de los valores reales. Para obtener más información, consulte Nombres de atributos de expresión (Alias) en DynamoDB y Valores de los atributos de expresión.

ejemplo

Consulta la tabla Thread para buscar un valor concreto de ForumName (clave de partición). La consulta leerá todos los elementos que tengan ese valor de ForumName, porque la clave de ordenación (Subject) no se incluye en KeyConditionExpression.

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name" \ --expression-attribute-values '{":name":{"S":"Amazon DynamoDB"}}'
ejemplo

Consulta la tabla Thread para buscar un valor concreto de ForumName (clave de partición), pero esta vez devuelve solo los elementos que tienen un valor determinado de Subject (clave de ordenación).

aws dynamodb query \ --table-name Thread \ --key-condition-expression "ForumName = :name and Subject = :sub" \ --expression-attribute-values file://values.json

Los argumentos de --expression-attribute-values se almacenan en el archivo values.json.

{ ":name":{"S":"Amazon DynamoDB"}, ":sub":{"S":"DynamoDB Thread 1"} }
ejemplo

Consulta la tabla Reply para buscar un valor concreto de Id (clave de partición), pero solo devuelve los elementos cuyo valor de ReplyDateTime (clave de ordenación) comienza por determinados caracteres.

aws dynamodb query \ --table-name Reply \ --key-condition-expression "Id = :id and begins_with(ReplyDateTime, :dt)" \ --expression-attribute-values file://values.json

Los argumentos de --expression-attribute-values se almacenan en el archivo values.json.

{ ":id":{"S":"Amazon DynamoDB#DynamoDB Thread 1"}, ":dt":{"S":"2015-09"} }

Puede utilizar cualquier nombre de atributo en una expresión de condición de clave, siempre y cuando el primer carácter sea a-z o A-Z y el resto de los caracteres (a partir del segundo carácter, si lo hay) sea a-z, A-Z o 0-9. Además, el nombre de atributo no debe ser una palabra reservada de DynamoDB. Para obtener una lista completa de estas palabras, consulte Palabras reservadas en DynamoDB. Si un nombre de atributo no cumple estos requisitos, debe definir un nombre de atributo de expresión como marcador de posición. Para obtener más información, consulte Nombres de atributos de expresión (Alias) en DynamoDB.

DynamoDB almacena cerca unos de otros y ordenados según su clave de ordenación aquellos elementos que tienen un valor de clave de partición determinado. En una operación Query, DynamoDB recupera los elementos de forma ordenada y, a continuación, los procesa mediante las expresiones KeyConditionExpression y FilterExpression que estén presentes. Solo entonces devuelve los resultados de Query al cliente.

Una operación Query siempre devuelve un conjunto de resultados. Si no se encuentran elementos coincidentes, el conjunto de resultados está vacío.

Los resultados de Query siempre se ordenan según el valor de la clave de ordenación. Si el tipo de datos de la clave de ordenación es Number, los resultados se devuelven en orden numérico. De lo contrario, los resultados se devuelven según el orden de los bytes UTF-8. De forma predeterminada, el orden es ascendente. Para invertirlo, establezca el parámetro ScanIndexForward en false.

En una sola operación Query se puede recuperar un máximo de 1 MB de datos. Este límite se aplica antes de que FilterExpression o ProjectionExpression se apliquen a los resultados. Si LastEvaluatedKey está presente en la respuesta y su valor no es null, debe paginar el conjunto de resultados (consulte Paginación de los resultados de la consulta de la tabla).