Comment voir, parcourir et éditer des données DynamoDB
Chaque « look at » ou « change » que tu fais à un table DynamoDB mappe à l'une
d'un petit set d'opérations API — GetItem, Query, Scan, PutItem,
UpdateItem, DeleteItem. Il n'y a pas de table viewer relationnel en
dessous : « browse un table » est littéralement un Scan, et « éditer une
ligne » est un UpdateItem contre une . Savoir
quelle opération chaque clic mappe est la différence entre une lecture bon
marché et un scan full-table que tu ne voulais pas lancer.
DynoTable est un GUI par-dessus exactement ces opérations — il te montre laquelle tu es sur le point de lancer, et le coût, avant que ça touche le wire.
Comment parcourir un table DynamoDB
Ouvrir un table pour « voir ce qu'il y a dedans » est un Scan — il lit
chaque item du table ou de l'index
(AWS :
« A Scan operation in Amazon DynamoDB reads every item in a table or a
secondary index. »). Fine pour les petits tables ; sur un grand c'est le
footgun de coût classique couvert dans
query vs scan.
Un seul Scan renvoie au plus 1 MB de données, puis te tend une
LastEvaluatedKey pour fetch la page suivante — donc « browse tout le table »
est vraiment une boucle de pagination
(AWS :
« A single Scan request can retrieve a maximum of 1 MB of data » et « the
LastEvaluatedKey from a Scan response should be used as the
ExclusiveStartKey for the next Scan request »). Vois
pagination pour comment le curseur marche et
pourquoi les numéros de page style offset n'existent pas ici.
Comment filter / scanner des données DynamoDB
Un ne te sauve pas un scan. DynamoDB applique le filter après que la lecture complete, donc tu paies pour chaque item scanné — pas seulement les lignes que tu gardes.
A filter expression is applied after a
Scanfinishes but before the results are returned. Therefore, aScanconsumes the same amount of read capacity, regardless of whether a filter expression is present. — documentation AWS du Scan
La réponse rend ça visible : ScannedCount est « the number of items evaluated,
before any ScanFilter is applied » tandis que Count est ce qui a survécu au
filter
(AWS).
Un haut ScannedCount avec un minuscule Count est la signature d'un scan
inefficace.
Comment query un table DynamoDB
Un Query est la lecture cheap, ciblée — mais il requiert une partition
key. Per
AWS :
« You must provide the name of the partition key attribute and a single value
for that attribute. Query returns all items with that partition key value.
Optionally, you can provide a sort key attribute and use a comparison operator
to refine the search results. »
Donc un Query ne lit que les items sous une partition key, optionnellement
restreints par une condition de sort key — jamais tout le table. Pas de
partition key, pas de Query : tu es de retour à un Scan. Ce choix est la
décision de coût la plus importante dans DynamoDB ; le breakdown complet est
dans query vs scan.
En on-demand us-east-1, ouvrir un table pour le « browse » lance un Scan
paginé qui facture 0.5 RCU par 4 KB eventually-consistent par item examiné —
un scroll GUI à travers un table de 10 GB de lignes de 1 KB est de
l'ordre de 2.5 millions de RCU si tu charges tout. Un Query ciblé sur une
partition key ne lit que cette item collection. Estime browse vs query dans le
calculateur de pricing.
Pour assembler le KeyConditionExpression / FilterExpression sans écrire la
syntaxe de placeholder à la main, utilise le
DynamoDB Expression Builder — il émet les
maps names/values exactes que l'API attend.
Comment éditer un item dans DynamoDB
Éditer un item est un UpdateItem contre sa primary key complète. Tu ne
réécris pas tout l'item — tu fournis un nommant seulement les attributs que tu changes :
UpdateItem
Key: { "PK": "USER#42", "SK": "PROFILE" }
UpdateExpression: SET email = :e, updatedAt = :tDeux faits qui piègent les gens, tous deux depuis les AWS items docs :
- Tu dois spécifier la primary key entière, pas juste une partie. Sur un table c'est partition key et sort key. Tu ne peux pas « éditer une ligne » par un attribut arbitraire — ça a besoin d'un scan pour trouver la clé d'abord.
UpdateItemest un upsert. « If an item with the specified key does not exist,UpdateItemcreates a new item. Otherwise, it modifies an existing item's attributes. » Une typo dans la clé crée silencieusement un nouvel item au lieu d'error.
Comment supprimer un item
Un DeleteItem, encore keyed par la primary key complète :
« DeleteItem deletes the item with the specified key »
(AWS).
Même règle que l'édition — tu as besoin de toute la clé, donc supprimer « toutes
les lignes où status = 'open' » n'est pas un appel ; tu scan/query pour trouver
les clés, puis delete chacune. BatchWriteItem bundle jusqu'à 25 requêtes
put/delete
(AWS :
« The BatchWriteItem operation can contain up to 25 individual PutItem and
DeleteItem requests »), mais chacune cible encore une clé — il n'y a pas de
DELETE … WHERE.
Comment voir des données nested / JSON
Les items DynamoDB sont stockés dans un format wire type-tagged (DynamoDB-JSON),
où chaque valeur porte un descripteur de type d'une ou deux lettres (S, N,
M, L, SS… — la liste complète des descripteurs est dans les
AWS data types docs).
Le JSON plain n'a pas de type set, donc un array round-trip comme list (L),
jamais string set (SS) — une vraie limitation de conversion, pas un bug
d'affichage. La map de types complète est dans
types de données DynamoDB ; pour convertir un blob
DynamoDB-JSON vers plain JSON et retour, utilise le
convertisseur JSON DynamoDB.
Au-delà de browse-and-edit : querying que DynamoDB ne peut pas
Scan/Query/UpdateItem couvrent view et edit, mais ils ne peuvent pas
analyser — DynamoDB n'a ni JOIN, ni GROUP BY, ni fonctions d'agrégat
comme COUNT/SUM, et
PartiQL ne les ajoute pas non plus : sa
grammaire SELECT est juste
SELECT … FROM table [WHERE …] [ORDER BY …], sans clause join ou grouping
(référence AWS du SELECT PartiQL),
donc chaque instruction mappe à un seul Get/Query/Scan/Put/Update/Delete. Le
SQL Workbench de DynoTable comble ce gap en matérialisant tes tables via le
vrai runtime de query DynamoDB et en lançant du SQL par-dessus — SQL dans
les règles des modèles d'accès DynamoDB — mais pour le browse-and-edit du
quotidien, les opérations ci-dessus sont toute la toolbox.
FAQ
Comment voir des données DynamoDB sans la AWS Console ?
Utilise un GUI desktop qui émet les mêmes appels Scan/Query. La AWS Console
browse les tables via des scans paginés ; un client dédié comme DynoTable fait
pareil mais montre la consumed capacity et l'opération que tu lances.
Comment éditer un item DynamoDB ?
Émets un UpdateItem contre la primary key complète de l'item avec un update
expression SET nommant seulement les attributs que tu changes. Dans un GUI,
inline-édite la cellule — ça compile vers cet UpdateItem pour toi.
Pourquoi filter coûte encore un full scan ? Parce que DynamoDB applique le filter après que le scan lit les items. Les items filtrés-out sont encore lus et mesurés. Pour couper le coût, query par une partition key (ou un GSI) au lieu de scanner.
Puis-je update beaucoup d'items à la fois ?
Il n'y a pas de UPDATE … WHERE — chaque UpdateItem/DeleteItem cible une
seule primary key. Pour changer plusieurs items dans une requête atomique,
TransactWriteItems applique jusqu'à 100 write actions (incluant Update) qui
réussissent toutes ou rollback toutes. Sinon tu scan/query pour collecter les
clés, puis écris chacune (jusqu'à 25 par BatchWriteItem).
Puis-je browse un table DynamoDB Local de la même façon ? Oui — pointe le même GUI sur l'endpoint local. Vois DynamoDB Local.
Envie de browse, filter et inline-éditer des tables DynamoDB — et lancer le SQL que PartiQL ne peut pas ? Télécharge DynoTable.