Principiante7 min de lectura

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 Scan termina pero antes de que los resultados se devuelvan. Por tanto, un Scan consume 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 = :t

Dos 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.
  • UpdateItem es un upsert. «Si no existe un Item con la clave especificada, UpdateItem crea 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.

Actualizado