Cómo ver, explorar y editar datos de DynamoDB
Cada «mirar» o «cambiar» que haces a una tabla de DynamoDB se asigna a una de un pequeño conjunto de
operaciones de API — GetItem, Query, Scan, PutItem, UpdateItem, DeleteItem.
No hay un visor de tablas relacional por debajo: «explorar una tabla» es literalmente un
Scan, y «editar una fila» es un UpdateItem contra una clave primaria. Saber a qué
operación se asigna cada clic es la diferencia entre una lectura barata y un scan de tabla
completa que no querías ejecutar.
DynoTable es una GUI sobre exactamente estas operaciones — te muestra cuál estás a punto de ejecutar, y el coste, antes de que llegue al cable.
Cómo explorar una tabla de DynamoDB
Abrir una tabla para «ver qué hay dentro» es un Scan — lee cada Item de la
tabla o índice (AWS:
«Una operación Scan en Amazon DynamoDB lee cada Item de una tabla o un índice
secundario.»). Bien para tablas pequeñas; en una grande es el clásico footgun de coste
cubierto en query vs scan.
Un solo Scan devuelve como máximo 1 MB de datos, y luego te entrega un LastEvaluatedKey para
obtener la siguiente página — así que «explorar la tabla entera» es en realidad un bucle de paginación
(AWS:
«Una sola solicitud Scan puede recuperar un máximo de 1 MB de datos» y «el
LastEvaluatedKey de una respuesta Scan debe usarse como ExclusiveStartKey
para la siguiente solicitud Scan»). Mira
paginación para entender cómo funciona el cursor y por qué los números de página
estilo offset no existen aquí.
Cómo filtrar / hacer scan de datos de DynamoDB
La trampa: una expresión de filtro no te ahorra un scan. DynamoDB aplica el filtro después de que la lectura se completa, así que pagas por cada Item escaneado — no solo las filas que te quedas.
Una expresión de filtro se aplica después de que un
Scantermina pero antes de que los resultados se devuelvan. Por tanto, unScanconsume la misma cantidad de capacidad de lectura, independientemente de si hay una expresión de filtro presente. — Docs de Scan de AWS
La respuesta hace esto visible: ScannedCount es «el número de Items evaluados,
antes de aplicar cualquier ScanFilter» mientras que Count es lo que sobrevivió al filtro
(AWS).
Un ScannedCount alto con un Count diminuto es la firma de un scan ineficiente.
Cómo consultar una tabla de DynamoDB
Un Query es la lectura barata y dirigida — pero requiere una clave de partición. Según
AWS:
«Debes proporcionar el nombre del atributo de clave de partición y un solo valor para
ese atributo. Query devuelve todos los Items con ese valor de clave de partición. Opcionalmente,
puedes proporcionar un atributo de sort key y usar un operador de comparación para refinar los
resultados de búsqueda.»
Así que un Query lee solo los Items bajo una clave de partición, opcionalmente acotados por una
condición de sort key — nunca la tabla entera. Sin clave de partición, no hay Query: estás
de vuelta a un Scan. Esa elección es la decisión de coste más importante en
DynamoDB; el desglose completo está en query vs scan.
Para ensamblar la KeyConditionExpression / FilterExpression sin escribir a mano
la sintaxis de marcadores de posición, usa el
Generador de expresiones de DynamoDB — emite los
mapas exactos de nombres/valores que la API espera.
Cómo editar un Item en DynamoDB
Editar un Item es un UpdateItem contra su clave primaria completa. No
reescribes el Item entero — proporcionas una expresión de actualización nombrando solo los
atributos que estás cambiando:
UpdateItem
Key: { "PK": "USER#42", "SK": "PROFILE" }
UpdateExpression: SET email = :e, updatedAt = :tDos hechos que hacen tropezar a la gente, ambos de las Docs de Items de AWS:
- Debes especificar la clave primaria entera, no solo parte de ella. En una tabla de clave compuesta eso es clave de partición y sort key. No puedes «editar una fila» por un atributo arbitrario — eso necesita un scan para encontrar la clave primero.
UpdateItemes un upsert. «Si no existe un Item con la clave especificada,UpdateItemcrea un nuevo Item. De lo contrario, modifica los atributos de un Item existente.» Un error tipográfico en la clave crea silenciosamente un nuevo Item en vez de dar error.
Cómo eliminar un Item
Un DeleteItem, de nuevo con clave por la clave primaria completa:
«DeleteItem elimina el Item con la clave especificada»
(AWS).
La misma regla que para editar — necesitas la clave completa, así que eliminar «todas las filas donde status =
'open'» no es una llamada; haces scan/query para encontrar las claves, y luego eliminas cada una.
BatchWriteItem agrupa hasta 25 solicitudes de put/delete
(AWS:
«La operación BatchWriteItem puede contener hasta 25 solicitudes individuales PutItem y
DeleteItem»), pero cada una aún apunta a una clave — no hay DELETE … WHERE.
Cómo ver datos anidados / JSON
Los Items de DynamoDB se almacenan en un formato de cable etiquetado por tipo (JSON-de-DynamoDB), donde cada
valor lleva un descriptor de tipo de una o dos letras (S, N, M, L, SS… — la
lista completa de descriptores está en las
Docs de tipos de datos de AWS).
El JSON plano no tiene tipo de conjunto, así que un array hace round-trip como una lista (L), nunca un conjunto
de cadenas (SS) — una limitación de conversión real, no un fallo de visualización. El mapa completo de tipos está en
tipos de datos de DynamoDB; para convertir un blob de JSON-de-DynamoDB a JSON
plano y de vuelta, usa el conversor de JSON de DynamoDB.
Más allá de explorar-y-editar: consultas que DynamoDB no puede
Scan/Query/UpdateItem cubren ver y editar, pero no pueden analizar —
DynamoDB no tiene JOIN, GROUP BY ni funciones de agregado como COUNT/SUM, y
PartiQL tampoco las añade: su gramática de SELECT es
solo SELECT … FROM table [WHERE …] [ORDER BY …], sin cláusula de join o agrupación
(referencia de SELECT de PartiQL de AWS),
así que cada sentencia se asigna a un solo Get/Query/Scan/Put/Update/Delete. El SQL
Workbench de DynoTable llena ese hueco materializando tus tablas a través del runtime de consulta
real de DynamoDB y ejecutando SQL encima — SQL dentro de las reglas de patrón de acceso de DynamoDB —
pero para el explorar-y-editar del día a día, las operaciones de arriba son toda la caja de herramientas.
Preguntas frecuentes
¿Cómo veo datos de DynamoDB sin la consola de AWS?
Usa una GUI de escritorio que emita las mismas llamadas Scan/Query. La consola de AWS
explora tablas vía scans paginados; un cliente dedicado como DynoTable hace lo mismo pero
muestra la capacidad consumida y la operación que estás ejecutando.
¿Cómo edito un Item de DynamoDB?
Emite un UpdateItem contra la clave primaria completa del Item con una expresión de actualización
SET nombrando solo los atributos que estás cambiando. En una GUI, edita la celda en línea
— se compila a ese UpdateItem por ti.
¿Por qué filtrar aún cuesta un scan completo? Porque DynamoDB aplica el filtro después de que el scan lee los Items. Los Items filtrados fuera aún se leen y se miden. Para reducir el coste, consulta por una clave de partición (o un GSI) en lugar de hacer scan.
¿Puedo actualizar muchos Items a la vez?
No en una llamada. UpdateItem/DeleteItem apuntan cada uno a una sola clave primaria; no hay
UPDATE … WHERE. Haces scan/query para recolectar las claves, y luego escribes cada una (hasta 25
por BatchWriteItem).
¿Puedo explorar una tabla de DynamoDB Local de la misma manera? Sí — apunta la misma GUI al endpoint local. Mira DynamoDB Local.
¿Quieres explorar, filtrar y editar en línea tablas de DynamoDB — y ejecutar el SQL que PartiQL no puede? Descarga DynoTable.