Iniciante7 min de leitura

Como Visualizar, Navegar e Editar Dados do DynamoDB

Todo "olhar" ou "alterar" que você faz numa tabela DynamoDB mapeia para uma de um pequeno conjunto de operações de API — GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem. Não há um visualizador de tabela relacional por baixo: "navegar uma tabela" é literalmente um Scan, e "editar uma linha" é um UpdateItem contra uma chave primária. Saber para qual operação cada clique mapeia é a diferença entre uma leitura barata e um full-table scan que você não pretendia rodar.

O DynoTable é uma GUI sobre exatamente essas operações — ele te mostra qual delas você está prestes a rodar, e o custo, antes que ela chegue à rede.

Como navegar uma tabela DynamoDB

Abrir uma tabela para "ver o que tem nela" é um Scan — ele lê todo item da tabela ou índice (AWS: "Uma operação Scan no Amazon DynamoDB lê todo item de uma tabela ou de um índice secundário."). Tudo bem para tabelas pequenas; em uma grande é o clássico problema de custo coberto em query vs scan.

Um único Scan retorna no máximo 1 MB de dados, depois te entrega um LastEvaluatedKey para buscar a próxima página — então "navegar a tabela inteira" é na verdade um loop de paginação (AWS: "Uma única requisição Scan pode recuperar um máximo de 1 MB de dados" e "o LastEvaluatedKey de uma resposta de Scan deve ser usado como ExclusiveStartKey para a próxima requisição Scan"). Veja paginação para como o cursor funciona e por que números de página no estilo offset não existem aqui.

Como filtrar / escanear dados do DynamoDB

A armadilha: uma expressão de filtro não te poupa de um scan. O DynamoDB aplica o filtro depois que a leitura termina, então você paga por todo item escaneado — não só pelas linhas que você mantém.

Uma expressão de filtro é aplicada depois que um Scan termina, mas antes de os resultados serem retornados. Portanto, um Scan consome a mesma quantidade de capacidade de leitura, independentemente de haver uma expressão de filtro presente. — docs de Scan da AWS

A resposta torna isso visível: ScannedCount é "o número de itens avaliados, antes de qualquer ScanFilter ser aplicado", enquanto Count é o que sobreviveu ao filtro (AWS). Um ScannedCount alto com um Count minúsculo é a assinatura de um scan ineficiente.

Como consultar uma tabela DynamoDB

Uma Query é a leitura barata e direcionada — mas exige uma chave de partição. Conforme a AWS: "Você precisa fornecer o nome do atributo de chave de partição e um único valor para esse atributo. A Query retorna todos os itens com esse valor de chave de partição. Opcionalmente, você pode fornecer um atributo de sort key e usar um operador de comparação para refinar os resultados da busca."

Então uma Query lê apenas os itens sob uma chave de partição, opcionalmente estreitada por uma condição de sort key — nunca a tabela inteira. Sem chave de partição, sem Query: você volta a um Scan. Essa escolha é a decisão de custo mais importante no DynamoDB; o detalhamento completo está em query vs scan.

Para montar a KeyConditionExpression / FilterExpression sem escrever à mão a sintaxe de placeholders, use o DynamoDB Expression Builder — ele emite os mapas exatos de nomes/valores que a API espera.

Como editar um item no DynamoDB

Editar um item é um UpdateItem contra sua chave primária completa. Você não reescreve o item inteiro — você fornece uma expressão de atualização nomeando apenas os atributos que está mudando:

UpdateItem
  Key:              { "PK": "USER#42", "SK": "PROFILE" }
  UpdateExpression: SET email = :e, updatedAt = :t

Dois fatos que pegam as pessoas de surpresa, ambos das docs de itens da AWS:

  • Você precisa especificar a chave primária inteira, não só parte dela. Numa tabela de chave composta, isso é chave de partição e sort key. Você não pode "editar uma linha" por um atributo arbitrário — isso precisa de um scan para encontrar a chave primeiro.
  • UpdateItem é um upsert. "Se um item com a chave especificada não existir, o UpdateItem cria um novo item. Caso contrário, ele modifica os atributos de um item existente." Um erro de digitação na chave silenciosamente cria um novo item em vez de dar erro.

Como excluir um item

Um DeleteItem, novamente chaveado pela chave primária completa: "DeleteItem exclui o item com a chave especificada" (AWS). Mesma regra da edição — você precisa da chave inteira, então excluir "todas as linhas onde status = 'open'" não é uma chamada; você escaneia/consulta para encontrar as chaves, depois exclui cada uma. O BatchWriteItem agrupa até 25 requisições de put/delete (AWS: "A operação BatchWriteItem pode conter até 25 requisições individuais de PutItem e DeleteItem"), mas cada uma ainda mira uma chave — não há DELETE … WHERE.

Como visualizar dados aninhados / JSON

Os itens do DynamoDB são armazenados num formato de transmissão com marcadores de tipo (DynamoDB-JSON), onde todo valor carrega um descritor de tipo de uma ou duas letras (S, N, M, L, SS… — a lista completa de descritores está nas docs de tipos de dados da AWS). JSON simples não tem tipo de conjunto, então um array faz round-trip como uma lista (L), nunca um conjunto de strings (SS) — uma limitação real de conversão, não um bug de exibição. O mapa completo de tipos está em tipos de dados do DynamoDB; para converter um blob de DynamoDB-JSON em JSON simples e de volta, use o conversor de JSON do DynamoDB.

Além de navegar-e-editar: consultas que o DynamoDB não consegue

Scan/Query/UpdateItem cobrem visualização e edição, mas eles não conseguem analisar — o DynamoDB não tem JOIN, GROUP BY, nem funções de agregação como COUNT/SUM, e o PartiQL também não as adiciona: sua gramática de SELECT é só SELECT … FROM table [WHERE …] [ORDER BY …], sem cláusula de join ou agrupamento (referência de SELECT do PartiQL da AWS), então cada instrução mapeia para um único Get/Query/Scan/Put/Update/Delete. O SQL Workbench do DynoTable preenche essa lacuna materializando suas tabelas através do runtime de consulta real do DynamoDB e rodando SQL por cima — SQL dentro das regras de padrão de acesso do DynamoDB — mas para o navegar-e-editar do dia a dia, as operações acima são a caixa de ferramentas inteira.

FAQ

Como visualizo dados do DynamoDB sem o AWS Console? Use uma GUI desktop que emita as mesmas chamadas Scan/Query. O AWS Console navega tabelas via scans paginados; um cliente dedicado como o DynoTable faz o mesmo, mas mostra a capacidade consumida e a operação que você está rodando.

Como edito um item do DynamoDB? Emita um UpdateItem contra a chave primária completa do item com uma expressão de atualização SET nomeando apenas os atributos que você está mudando. Numa GUI, edite a célula inline — ela compila para esse UpdateItem por você.

Por que filtrar ainda custa um scan inteiro? Porque o DynamoDB aplica o filtro depois de o scan ler os itens. Itens filtrados para fora ainda são lidos e tarifados. Para cortar custo, consulte por uma chave de partição (ou um GSI) em vez de escanear.

Posso atualizar muitos itens de uma vez? Não em uma chamada. UpdateItem/DeleteItem cada um mira uma única chave primária; não há UPDATE … WHERE. Você escaneia/consulta para coletar as chaves, depois escreve cada uma (até 25 por BatchWriteItem).

Posso navegar uma tabela do DynamoDB Local da mesma forma? Sim — aponte a mesma GUI para o endpoint local. Veja DynamoDB Local.

Quer navegar, filtrar e editar inline tabelas DynamoDB — e rodar o SQL que o PartiQL não consegue? Baixe o DynoTable.

Atualizado