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
Scantermina, mas antes de os resultados serem retornados. Portanto, umScanconsome 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 = :tDois 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, oUpdateItemcria 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.