Consulte pedidos com uma chave de partição e de ordenação

AWSBeginner
Pratique Agora

Introdução

Uma ferramenta de suporte a pedidos deve mostrar os pedidos do cliente correto em um mês escolhido. Consultar apenas um item ou parar em uma página filtrada vazia pode deixar registros válidos de fora. Você criará uma tabela de chave composta, consultará os pedidos de outubro de Ada e configurará uma aplicação fornecida para seguir chaves de continuação em uma visualização de pedidos embalados.

Conclua primeiro Crie uma tabela DynamoDB para pedidos, incluindo itens tipados e atualizações. Esta unidade começa de forma independente com uma conexão descartável nova, arquivos de dados sintéticos e uma aplicação comum. Use /home/labex/project, a AWS CLI oficial e AWS View; nenhum recurso de uma VM anterior é reutilizado.

Relação com as certificações

Este laboratório oferece prática nos seguintes tópicos de exame.

Defina chaves com base no padrão de acesso

Nesta etapa, você preparará pedidos que precisam de uma consulta por cliente e data. Uma chave primária composta tem uma chave de partição e uma chave de ordenação. A chave de partição agrupa os pedidos de um cliente; a chave de ordenação identifica cada pedido dentro desse grupo e ordena os resultados da consulta. Os dois valores juntos identificam um item.

As datas usam strings de largura fixa YYYY-MM-DD seguidas de # e um ID de pedido. Chaves de ordenação String comparam bytes UTF-8, portanto esse formato mantém estas datas em ordem cronológica. Este é um pequeno modelo de pedidos, não um projeto universal de tabela única.

cd /home/labex/project
aws sts get-caller-identity
aws dynamodb create-table --table-name labex-d02-orders --attribute-definitions AttributeName=customer_id,AttributeType=S AttributeName=order_key,AttributeType=S --key-schema AttributeName=customer_id,KeyType=HASH AttributeName=order_key,KeyType=RANGE --billing-mode PAY_PER_REQUEST
aws dynamodb wait table-exists --table-name labex-d02-orders

Um orders.json preparado contém cinco pedidos sintéticos, não credenciais. cat exibe a solicitação comum da API para que você possa inspecionar cada cliente, data e status antes de carregá-la.

cat orders.json
aws dynamodb batch-write-item --cli-input-json file://orders.json

BatchWriteItem carrega essas chaves distintas. Confirme que UnprocessedItems é {}. Na AWS, um lote não processado precisa de nova tentativa; apenas uma resposta não garante que todas as gravações foram concluídas. O exemplo inclui pedidos de setembro, outubro e novembro de Ada e o pedido de outubro de Bob, permitindo testar limites em vez de apenas um caso bem-sucedido.

Consulte um cliente e um intervalo de datas

Nesta etapa, você selecionará os pedidos de outubro de Ada com condições de chave. Query exige igualdade em uma chave de partição e pode restringir a chave de ordenação. Scan examina a tabela em vez de escolher primeiro uma partição de chave. A próxima etapa adiciona um filtro; primeiro, escolha o cliente e o intervalo de datas usando as chaves.

A chave de cliente seleciona a partição de Ada; o intervalo de datas seleciona seus pedidos de outubro.

A chave de cliente seleciona a partição de Ada; o intervalo de datas seleciona seus pedidos de outubro.

Primeiro, inspecione os cinco registros para entender o escopo de um scan.

aws dynamodb scan --table-name labex-d02-orders --consistent-read --query 'Items'

Uma aplicação fornecida de consulta de pedidos lê lookup.json e chama a API Query do DynamoDB. Seu executável é order-lookup; seu código-fonte é fornecido para inspeção, e não é necessário escrever Python. Você configurará campos comuns de solicitação Query e inspecionará resultados efetivos da aplicação em vez do histórico de comandos.

BETWEEN inclui ambos os extremos. Uma chave de pedido contém a data seguida de # e seu ID. O início 2026-10-01# vem antes dos IDs desse dia; 2026-10-31#~ vem depois deles porque ~ é ordenado após as letras e números usados aqui. Esse limite é específico deste formato de chave.

O heredoc entre aspas grava JSON literalmente em lookup.json. request contém os campos de Query. paginate: false solicita uma página da aplicação por enquanto; você ativará a continuação na próxima etapa.

cat > lookup.json <<'JSON'
{
  "paginate": false,
  "request": {
    "TableName": "labex-d02-orders",
    "KeyConditionExpression": "customer_id = :customer AND order_key BETWEEN :start AND :end",
    "ExpressionAttributeValues": {
      ":customer": {
        "S": "ada"
      },
      ":start": {
        "S": "2026-10-01#"
      },
      ":end": {
        "S": "2026-10-31#~"
      }
    },
    "ConsistentRead": true
  }
}
JSON

Os valores de Query usam strings tipadas, como em GetItem. O arquivo da aplicação também contém sua própria configuração paginate, portanto compare-o com uma solicitação direta da CLI para as mesmas chaves.

aws dynamodb query --table-name labex-d02-orders --key-condition-expression 'customer_id = :customer AND order_key BETWEEN :start AND :end' --expression-attribute-values '{":customer":{"S":"ada"},":start":{"S":"2026-10-01#"},":end":{"S":"2026-10-31#~"}}' --consistent-read
./order-lookup

Ambos os resultados contêm apenas O100 e O101 de Ada, em ordem crescente de chave de ordenação. O200 de Bob e os pedidos de Ada fora do mês são excluídos. Abra AWS View para ver o resultado efetivo de Order lookup ao lado dos itens armazenados na tabela. Nenhum registro é alterado por essas leituras.

O exemplo da Console oficial abaixo mostra uma Query por chave de partição. Seus Artist e songTitle têm as mesmas funções de chave que customer_id e order_key aqui. Use-o para reconhecer a interface; continue este exercício no Terminal e AWS View.

Exemplo da Console oficial do DynamoDB de uma Query por chave de partição.

Fonte: Tutorial do AWS DynamoDB.

Siga a paginação mesmo quando uma página filtrada está vazia

Nesta etapa, você recuperará pedidos embalados de outubro sem parar em uma primeira página vazia. DynamoDB aplica Limit aos itens avaliados antes de um filtro. Respostas Query podem incluir LastEvaluatedKey mesmo quando Items está vazio. Essa chave de continuação, em vez de uma contagem de itens, informa à aplicação se deve solicitar outra página. Um filtro não reduz o trabalho de leitura já realizado.

O packed-page.json preparado mantém as mesmas chaves, adiciona um filtro de status PACKED e define Limit: 1. Esse limite pequeno torna visível o limite entre páginas. --no-paginate impede a CLI de buscar páginas adicionais, para que você possa inspecionar uma resposta do serviço.

cat packed-page.json
aws dynamodb query --cli-input-json file://packed-page.json --no-paginate

O primeiro pedido avaliado é NEW, portanto espere Items: [], Count: 0, ScannedCount: 1 e um LastEvaluatedKey para O100. Este não é o fim do conjunto de resultados.

As duas primeiras páginas: o filtro deixa a página 1 vazia, mas sua chave de continuação leva ao pedido embalado.

As duas primeiras páginas: o filtro deixa a página 1 vazia, mas sua chave de continuação leva ao pedido embalado.

Escreva a configuração da aplicação para seguir essa chave até a API deixar de retorná-la. #state evita a palavra reservada status, e :state contém o valor do filtro.

cat > lookup.json <<'JSON'
{
  "paginate": true,
  "request": {
    "TableName": "labex-d02-orders",
    "KeyConditionExpression": "customer_id = :customer AND order_key BETWEEN :start AND :end",
    "ExpressionAttributeValues": {
      ":customer": {
        "S": "ada"
      },
      ":start": {
        "S": "2026-10-01#"
      },
      ":end": {
        "S": "2026-10-31#~"
      },
      ":state": {
        "S": "PACKED"
      }
    },
    "ConsistentRead": true,
    "ExpressionAttributeNames": {
      "#state": "status"
    },
    "FilterExpression": "#state = :state",
    "Limit": 1
  }
}
JSON
./order-lookup

A aplicação retorna apenas O101 de Ada com status PACKED, Count: 1 e Evaluated: 2. Neste conjunto de dados, Pages: 3 inclui uma solicitação final vazia que estabelece o fim da consulta. Uma chave de continuação marca um limite de leitura; ela não garante mais itens correspondentes. A aplicação segue ExclusiveStartKey até o serviço deixar de retorná-lo. No AWS View, o resultado da consulta muda enquanto todos os registros armazenados permanecem inalterados.

A aplicação efetiva segue chaves de continuação e retorna apenas o pedido embalado de outubro.

Verifique o inventário e remova a tabela do exercício

Nesta etapa, você fará a limpeza após comprovar o comportamento da consulta. Primeiro, confira que a tabela de destino ainda contém os cinco registros originais. Leituras e mudanças de configuração não devem modificar os dados de pedidos.

aws dynamodb scan --table-name labex-d02-orders --consistent-read --select COUNT

Espere Count: 5. Exclua apenas labex-d02-orders e espere por sua ausência. A tabela de referência pertence ao ambiente e deve permanecer.

aws dynamodb delete-table --table-name labex-d02-orders
aws dynamodb wait table-not-exists --table-name labex-d02-orders
aws dynamodb list-tables
aws dynamodb get-item --table-name labex-d02-reference --key '{"id":{"S":"platform"}}' --consistent-read

O inventário mantém apenas labex-d02-reference, cuja nota permanece keep unchanged. AWS View remove a tabela do exercício e o resultado da consulta. Respostas bem-sucedidas do serviço comprovam a exclusão; uma conexão indisponível não. A conexão descartável termina com esta VM.

Resumo

Você agrupou pedidos por cliente e os ordenou com chaves de ordenação baseadas em datas. Query selecionou a partição e o intervalo pretendidos, enquanto Scan examinou a tabela mais ampla. Você viu que filtros são executados após a avaliação e que uma página vazia ainda pode exigir continuação. A aplicação fornecida usou solicitações Query efetivas para reunir o pedido embalado por solicitações paginadas; depois, você removeu apenas os recursos do exercício.