Tipos de datos de DynamoDB
Cada atributo de DynamoDB se etiqueta con un código de tipo de una o dos letras en el formato de transporte. Conocer el conjunto importa porque el tipo determina tanto cómo se almacena un valor como cuánto cuenta para el tamaño de un Item.
¿Qué tipos de datos admite DynamoDB?
DynamoDB admite diez tipos de datos en tres categorías. Los escalares son String (S), Number (N), Binary (B), Boolean (BOOL) y Null (NULL). Los documentos son Map (M) y List (L), que anidan otros tipos. Los sets son String Set (SS), Number Set (NS) y Binary Set (BS): desordenados, homogéneos y no vacíos. Solo S, N y B pueden ser una clave.
| Código | Tipo | Categoría | Equivalente JSON / JS | Ejemplo (DynamoDB-JSON) |
|---|---|---|---|---|
S | String | Escalar | string | {"S": "Ada"} |
N | Number | Escalar | number | {"N": "37"} |
B | Binary | Escalar | Uint8Array / base64 | {"B": "ZGF0YQ=="} |
BOOL | Boolean | Escalar | boolean | {"BOOL": true} |
NULL | Null | Escalar | null | {"NULL": true} |
M | Map | Documento | object | {"M": {"k": {"S": "v"}}} |
L | List | Documento | array | {"L": [{"N": "1"}]} |
SS | String set | Set | — (sin tipo JSON) | {"SS": ["a", "b"]} |
NS | Number set | Set | — | {"NS": ["1", "2"]} |
BS | Binary set | Set | — | {"BS": ["ZA=="]} |
Escalares
S— string (UTF-8; su tamaño se calcula por su longitud en bytes, no por el número de caracteres).N— número, enviado como string para preservar la precisión; hasta 38 dígitos.B— binario, enviado codificado en base64.BOOL—true/false.NULL— un marcador de null explícito.
Documentos
M— map (objeto). Los atributos anidados conservan cada uno su propia etiqueta de tipo.L— list. Los elementos pueden ser de tipos mixtos.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}Sets
SS— string set,NS— number set,BS— binary set.
Los sets son desordenados, homogéneos y no pueden estar vacíos. Y algo crucial: el
JSON plano no tiene un tipo set — un array hace un round-trip como una list (L),
nunca como un SS/NS. Es una limitación de conversión real, no un bug; consulta la
nota del conversor de DynamoDB-JSON.
¿Qué tipos pueden ser una clave?
Las claves de y de — en la tabla y en cualquier índice — deben ser un escalar,
y solo S, N o B. No puedes usar como clave un boolean, set, map o list. Modela
una clave «compuesta» concatenando valores en un solo S (p. ej. ORDER#2026#42).
Límites que conviene conocer
- Un Item alcanza un máximo de 400 KB — cada nombre de atributo más su valor, incluidos los anidados.
- Los números tienen hasta 38 dígitos de precisión (positivos o negativos).
- Los maps y las lists se anidan hasta 32 niveles de profundidad.
- Los sets son no vacíos y homogéneos: sin sets vacíos, sin mezclar
SyN.
Por qué el tipo afecta al coste
El tamaño de un Item es la suma de los bytes de los nombres de atributo más los bytes de los valores, y cada tipo se dimensiona de forma distinta: los números se compactan, los booleans y los nulls ocupan 1 byte, y los maps y las lists añaden sobrecarga por elemento. Ese tamaño se redondea hacia arriba a unidades de capacidad de lectura/escritura. Mide un Item real con la calculadora de tamaño de Items.
Hazlo en DynoTable
La distinción set-frente-a-list de arriba es justo lo que las herramientas suelen ocultar. El editor de Items de DynoTable la hace explícita con un conmutador de formato:
- JSON plano — los primitivos se quedan en plano (
"age": 30), pero los sets conservan su envoltorio de tipo para que sobrevivan al round-trip:"tags": { "SS": ["a", "b"] },"scores": { "NS": ["1.5", "2.5"] }. Esta es la forma legible para la edición del día a día. - DynamoDB JSON — la forma canónica de AWS, donde cada valor
lleva su etiqueta de tipo:
"age": { "N": "30" },"name": { "S": "alice" }.
Cambiar entre ambas te muestra exactamente cómo se representa cada tipo escalar, de
documento y de set en el formato de transporte — y como los tipos set no tienen
equivalente en JSON plano, el conmutador es la única forma de crear a mano un
SS/NS/BS sin hacer el marshalling del Item entero.

Prueba DynoTable para ver el tipo de cada atributo y el recuento de bytes en vivo mientras editas un Item — y para filtrar o agregar sobre atributos tipados en el SQL Workbench, que lee cada etiqueta de tipo por ti. Para convertir un blob marshalled sin la aplicación, el conversor de DynamoDB-JSON hace el mismo round-trip en el navegador.


