Tipos de dados do DynamoDB
Todo atributo do DynamoDB é marcado com um código de tipo de uma ou duas letras no formato de transmissão. Conhecer o conjunto importa porque o tipo determina tanto como um valor é armazenado quanto como ele conta para o tamanho de um item.
Quais tipos de dados o DynamoDB suporta?
O DynamoDB suporta dez tipos de dados em três categorias. Escalares são String (S), Number (N), Binary (B), Boolean (BOOL) e Null (NULL). Documentos são Map (M) e List (L), que aninham outros tipos. Conjuntos são String Set (SS), Number Set (NS) e Binary Set (BS) — não ordenados, homogêneos e não vazios. Apenas S, N e B podem ser uma chave.
| Código | Tipo | Categoria | Equivalente JSON / JS | Exemplo (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 | Conjunto | — (sem tipo JSON) | {"SS": ["a", "b"]} |
NS | Number set | Conjunto | — | {"NS": ["1", "2"]} |
BS | Binary set | Conjunto | — | {"BS": ["ZA=="]} |
Escalares
S— string (UTF-8; dimensionada pelo comprimento em bytes, não pela contagem de caracteres).N— número, enviado como string por precisão; até 38 dígitos.B— binário, enviado codificado em base64.BOOL—true/false.NULL— um marcador explícito de null.
Documentos
M— map (objeto). Os atributos aninhados mantêm cada um sua própria etiqueta de tipo.L— list. Os elementos podem ter tipos mistos.
{"profile": {"M": {"name": {"S": "Ada"}, "age": {"N": "37"}}}}Conjuntos
SS— string set,NS— number set,BS— binary set.
Os conjuntos são não ordenados, homogêneos e não podem ser vazios. Fundamentalmente, o JSON puro não tem
tipo de conjunto — um array vai e volta como uma list (L), nunca como um SS/NS. Isso é uma
limitação real de conversão, não um bug; veja a nota do
conversor de DynamoDB-JSON.
Quais tipos podem ser uma chave?
As chaves de e de — na tabela e em qualquer índice — devem ser um escalar,
e apenas S, N ou B. Você não pode indexar por um boolean, conjunto, map ou list. Modele uma
chave "composta" concatenando valores em um único S (por exemplo, ORDER#2026#42).
Limites que vale conhecer
- Um item chega no máximo a 400 KB — cada nome de atributo mais o valor, incluindo os aninhados.
- Os números carregam até 38 dígitos de precisão (positivos ou negativos).
- Maps e lists aninham até 32 níveis de profundidade.
- Os conjuntos são não vazios e homogêneos — sem conjunto vazio, sem misturar
SeN.
Por que o tipo afeta o custo
O tamanho do item é a soma dos bytes dos nomes de atributo mais os bytes dos valores, e cada tipo é dimensionado de forma diferente — números são compactados, booleans e nulls têm 1 byte, maps e lists adicionam overhead por elemento. Esse tamanho é arredondado para cima até unidades de capacidade de leitura/escrita capacity units. Meça um item real com a calculadora de tamanho de item.
Faça isso no DynoTable
A distinção conjunto-vs-list acima é justamente o que as ferramentas costumam esconder. O editor de itens do DynoTable a torna explícita com um alternador de formato:
- JSON puro — os primitivos permanecem simples (
"age": 30), mas os conjuntos mantêm seu invólucro de tipo para que sobrevivam à ida e volta:"tags": { "SS": ["a", "b"] },"scores": { "NS": ["1.5", "2.5"] }. Esta é a forma legível para a edição do dia a dia. - DynamoDB JSON — a forma canônica da AWS, onde cada valor
carrega sua etiqueta de tipo:
"age": { "N": "30" },"name": { "S": "alice" }.
Alternar entre elas mostra exatamente como cada tipo escalar, de documento e de conjunto
é representado no formato de transmissão — e, como os tipos de conjunto não têm equivalente
em JSON puro, o alternador é a única forma de escrever um SS/NS/BS à mão sem
fazer o marshalling do item inteiro manualmente.

Experimente o DynoTable para ver o tipo de cada atributo e a contagem de bytes ao vivo enquanto você edita um item — e para filtrar ou agregar entre atributos tipados no SQL Workbench, que lê cada etiqueta de tipo por você. Para converter um blob marshalled sem o app, o conversor de DynamoDB-JSON faz a mesma ida e volta no navegador.


