Expressões de condição de chave para a operação de consulta - Amazon DynamoDB

Expressões de condição de chave para a operação de consulta

Para especificar os critérios de pesquisa, você deve usar uma expressão de condição principal – uma string que determina os itens a serem lidos da tabela ou índice.

Você deve especificar o nome e o valor da chave de partição como uma condição de igualdade. Não é possível usar um atributo que não seja de chave em uma expressão de condição de chave.

Opcionalmente, você pode fornecer uma segunda condição para a chave de classificação (se houver). A condição de chave de classificação deve usar um dos seguintes operadores de comparação:

  • a = b - verdadeiro se o atributo a for igual ao valor b

  • a < b: verdadeiro se a for menor que b

  • a <= b: verdadeiro se a for menor que ou igual a b

  • a > b: verdadeiro se a for maior que b

  • a >= b: verdadeiro se a for maior ou igual a b

  • a BETWEEN b AND c - verdadeiro se a for maior ou igual a be menor ou igual a c.

A função a seguir também tem suporte:

  • begins_with (a, substr)- verdadeiro se o valor do atributo a começa com uma determinada substring.

Os seguintes exemplos da AWS Command Line Interface (AWS CLI) demonstram o uso das expressões de condição de chave. Essas expressões usam espaços reservados (como :name e :sub), em vez de valores reais. Para obter mais informações, consulte Nomes de atributos de expressão no DynamoDB e Valores de atributo de expressão.

exemplo

Consulte a tabela Thread para encontrar um ForumName específico (chave de partição). Todos os itens com esse valor de ForumName são lidos pela consulta, porque a chave de classificação (Subject) não está incluída na KeyConditionExpression.

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

Consulte a tabela Thread para encontrar um ForumName específico (chave de partição), mas, desta vez, retornar apenas os itens com um determinado Subject (chave de classificação).

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

Os argumentos de --expression-attribute-values são armazenados no arquivo values.json.

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

Consulte a tabela Reply para encontrar um Id específico (chave de partição), mas retornar apenas os itens cuja ReplyDateTime (chave de classificação) começa com determinados caracteres.

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

Os argumentos de --expression-attribute-values são armazenados no arquivo values.json.

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

Você pode usar qualquer nome de atributo em uma expressão de condição principal, desde que o primeiro caractere seja a-z ou A-Z e o restante dos caracteres (a partir do segundo caractere, se houver) seja a-z, A-Z ou 0-9. Além disso, o nome do atributo não deve ser uma palavra reservada do DynamoDB. (Para obter uma lista completa dessas palavras reservadas, consulte Palavras reservadas no DynamoDB.) Se um nome de atributo não atender a esses requisitos, defina um nome de atributo de expressão como um espaço reservado. Para ter mais informações, consulte Nomes de atributos de expressão no DynamoDB.

Para itens com um determinado valor de chave de partição, o DynamoDB armazena esses itens juntos em ordem classificada por valor de chave de classificação. Em uma operação Query, o DynamoDB recupera os itens na ordem classificada e, em seguida, processa os itens usando KeyConditionExpression e qualquer FilterExpression que estiver presente. Somente então os resultados de Query são enviados de volta para o cliente.

Uma operação Query sempre retorna um conjunto de resultados. Se não forem encontrados itens correspondentes, o conjunto de resultados estará vazio.

Os resultados de Query são sempre classificados pelo valor de chave de classificação. Se o tipo de dados da chave de classificação for Number, os resultados serão retornados em ordem numérica. Caso contrário, os resultados serão retornados na ordem de bytes UTF-8. Por padrão, a ordem de classificação é crescente. Para reverter a ordem, defina o parâmetro ScanIndexForward como false.

Uma única operação Query pode recuperar um máximo de 1 MB de dados. Esse limite se aplica antes de qualquer expressão FilterExpression ou ProjectionExpression ser aplicada aos resultados. Se LastEvaluatedKey estiver presente na resposta e não for nula, você deverá paginar o conjunto de resultados (consulte Paginar resultados de consulta de tabela).