Como exportar uma tabela DynamoDB para CSV (4 maneiras)
DynamoDB não possui botão nativo "exportar para CSV". Cada valor volta embrulhado em
DynamoDB's empacotado JSON — {"S": "..."},
{"N": "123"}, {"M": {...}} — e uma tabela pode conter mapas aninhados, listas e
conjuntos sem representação óbvia de coluna plana. Então, "exportar DynamoDB para CSV" é
na verdade, dois problemas: tire os itens e achate o JSON digitado em
linhas. Nem o console nem a exportação gerenciada realizam a segunda etapa para você.
Este guia começa com o modo como você executa as duas etapas e, em seguida, aborda o três rotas de ferramentas AWS e quando cada uma é a escolha certa.
Como exporto uma tabela DynamoDB para CSV?
Abra a tabela em DynoTable, filtre pelas linhas
você deseja e exporte o resultado para CSV com um clique - digite descritores
valores desembrulhados e aninhados nivelados para você
(Método 1). Construindo a partir de AWS
ferramentas em vez disso: digitalize com a CLI e remodele com jq para uma pequena tabela
(Método 2), use a exportação gerenciada do S3 para grandes
tabelas (Método 3) ou escreva um
script curto quando você precisar de modelagem personalizada
(Método 4).
- Filtrado/formatado CSV (um subconjunto de colunas, apenas alguns itens): uma GUI exportar (Método 1) ou um script. A exportação gerenciada do S3 fornece a tabela inteira, não filtrada.
- Mesa pequena, ad-hoc, somente terminal: AWS CLI
scan+jq(Método 2). Tudo bem até que os atributos aninhados sejam exibidos para cima. - Tabela grande (GBs+): DynamoDB exportar para S3 (Método 3) e, em seguida, converta o despejar. Ele é executado de forma assíncrona e não consome nenhuma capacidade de leitura — mas gera DynamoDB JSON, não CSV.
Método 1: exportação com um clique em DynoTable
DynoTable trata a exportação como parte da navegação: execute ou filtro uma consulta, pressione ⌘⇧E (ou o botão Exportar na barra de ferramentas da guia) e escolha o que será exibido:
- Formatos: CSV (uma linha por item, com cabeçalhos — define serialize como
JSON matrizes dentro de uma célula), JSON e NDJSON. JSON/NDJSON venha
desempacotado (simples
"count": 3) ou empacotado DynamoDB-JSON quando você precisa de uma viagem de ida e volta sem perdas que preserve grandes números. - Escopos: as linhas carregadas atualmente, apenas sua seleção ou o correspondência completa do filtro — todos os itens correspondentes à sua consulta, transmitidos diretamente de DynamoDB em vez de apenas o que está na tela. Esse último é o exportação filtrada que o snapshot gerenciado do S3 não pode fazer.
- Destino: área de transferência ou arquivo. Para capturas únicas, clique com o botão direito em uma linha e Copiar como… coloca CSV, JSON, NDJSON ou DynamoDB-JSON diretamente no área de transferência, sem diálogo.

Os problemas de achatamento que quebram as rotas DIY abaixo são resolvidos: digite descritores são desembrulhados, mapas e listas aninhados são nivelados e renomeados colunas fluem para os cabeçalhos CSV. Grandes exportações desconecte e execute o plano de fundo - transmitido para o disco linha por linha, sobrevivendo às alternâncias de guias e até mesmo recarregar um aplicativo — para que uma exportação de vários gigabytes nunca precise caber na memória.
É um cliente desktop DynamoDB, a mesma ferramenta que você já usa para navegar no mesa; veja como ele se compara a outras GUIs DynamoDB. Quando você não o usaria? Quando a exportação deve ser executada sem supervisão em um pipeline - é isso que a rota do script (Método 4) é para.
Método 2: AWS varredura CLI + jq
Para uma tabela pequena você pode digitalizá-la e remodelar a saída com jq. Um Scan lê
cada item da tabela e retorna em páginas de até 1 MB; a CLI
segue a paginação para você automaticamente
(AWS documentos: Scanning tabelas).
aws dynamodb scan --table-name MyTable --output json \
| jq -r '.Items[] | [.id.S, .name.S, .price.N] | @csv' \
> out.csvO problema está na linha jq: você tem que escrever à mão .id.S, .name.S,
.price.N — ultrapassando o descritor de tipo de cada atributo (S, N, B,
BOOL, M, L, SS, NS, BS) para obter o valor bruto. Isso é administrável para um
mesa plana com três colunas de string. Tudo desmorona no momento em que você tem:
- Mapas/listas aninhados —
{"M": {...}}ou{"L": [...]}não possuem uma única coluna para achatar em;@csvengasga ou você codifica a célula com JSON manualmente. - Conjuntos —
{"SS": ["a","b"]}é um array, não um escalar. - Atributos esparsos — DynamoDB não tem esquema, então o item A pode ter um
preçoe item B não pode. Sua lista de colunas fixas elimina ou desalinha colunas silenciosamente.
Também não existe --output csv — os formatos de saída da CLI são json,
yaml, text, table e off, nenhum dos quais entende os tipos DynamoDB. Então você
ainda precisa de jq (ou um script) para remover as tags de tipo. Essa é a principal razão pela qual "exportar
DynamoDB tabela para CSV via AWS CLI" nunca é uma linha única além do caso trivial.
Para exportar uma tabela inteira maior desta forma sem levar o dia todo, paralelize o
digitalizar com --segment / --total-segments
(AWS documentos: verificação paralela —
DynamoDB "atribui itens a segmentos aplicando uma função hash a cada item
chave de partição", para que os segmentos possam ser desiguais) e leia
paginação para não parar na primeira página de 1 MB.
Método 3: DynamoDB exportar para S3 (tabelas grandes)
Para tabelas de qualquer tamanho real, a exportação gerenciada para Amazon S3 é a ferramenta certa.
Ele exporta um instantâneo de qualquer ponto da sua recuperação pontual (PITR)
janela - então PITR deve ser habilitado na tabela primeiro, ou a exportação falhará com
PointInTimeRecoveryUnavailableException —
é executado de forma assíncrona,
e não consome unidades de capacidade de leitura, portanto tem impacto zero na sua tabela
taxa de transferência ou disponibilidade (AWS documentos:
“As exportações são assíncronas, não consomem unidades de capacidade de leitura (RCUs) e não possuem
impacto no desempenho e disponibilidade da tabela"; "Você precisa ativar PITR na sua mesa
para usar a funcionalidade de exportação"). Isso também é o que o Exporta para S3 do console
a ação é desencadeada sob o capô: o console é apenas um front end para o mesmo API,
portanto, ele carrega o mesmo requisito PITR e a mesma saída JSON.
aws dynamodb export-table-to-point-in-time \
--table-arn arn:aws:dynamodb:us-east-1:123456789012:table/MyTable \
--s3-bucket my-export-bucket \
--export-format DYNAMODB_JSONA única pegadinha: a exportação S3 não gera CSV. Ela escreve DynamoDB JSON
ou Amazon Ion apenas, como arquivos compactados em gzip em
Formato JSON-lines (um item por linha), mais manifesto
arquivos (AWS documentos: formato de saída de exportação —
arquivos de dados são escritos como .json.gz, "o formato é JSON linhas", ao lado
manifest-summary.json / manifest-files.json). Você ainda precisa de uma etapa de conversão
depois:
- Athena / Glue lê o DynamoDB JSON exportado diretamente - aponte uma tabela para o
Prefixo S3, então escreva CSV de um
SELECT(esta é a "exportação DynamoDB usual para S3 depois para pipeline CSV"). AWS observa que "muitos serviços AWS, como Athena e AWS Glue, irá analisar este formato automaticamente" (formato de saída de exportação). - Role o seu próprio — descompacte os arquivos
.gz, analise cada linha JSON e nivele (o mesmo problema de nivelamento de qualquer outro método).
É também um instantâneo de tabela completa: não há nenhum filtro do lado do servidor apenas para exportar alguns itens. Se precisar de um subconjunto, você pode filtrar após o fato no Athena ou use uma GUI (Método 1) / script.
Método 4: um script rápido (boto3/Node)
Quando a exportação deve ser executada autônoma — um trabalho noturno, uma etapa de CI — um pequeno
script supera tudo acima. A vantagem é que os SDKs AWS
unmarshall o JSON digitado para você: a interface de recursos do boto3 e o JS SDK
DynamoDBDocumentClient retorna {"price": 2000} simples em vez de
{"price": {"N": "2000"}} (a interface de recursos do boto3 faz "a digitação dos dados
implícito", de acordo com o
AWS Guia Python;
o JS DocumentClient "converte dados de resposta anotados em tipos JavaScript nativos",
por @aws-sdk/lib-dynamodb).
import boto3, csv
table = boto3.resource("dynamodb").Table("MyTable")
rows, resp = [], table.scan()
rows += resp["Items"]
while "LastEvaluatedKey" in resp: # paginate to the end
resp = table.scan(ExclusiveStartKey=resp["LastEvaluatedKey"])
rows += resp["Items"]
with open("out.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=["id", "name", "price"])
w.writeheader()
for r in rows:
w.writerow({k: r.get(k) for k in w.fieldnames})Você ainda possui duas decisões que o SDK não pode tomar por você: como nivelar aninhados
mapeia/listas em colunas (JSON-codifica a célula? caminho de ponto as chaves?), e o que fazer
com atributos esparsos (aqui uma chave ausente se torna uma célula vazia via r.get(k)).
E não descarte o loop LastEvaluatedKey — uma única chamada scan() retorna apenas o
primeira página de 1 MB, portanto, sem ela você exporta silenciosamente parte da tabela.
Mesma advertência do Método 2: uma varredura de tabela completa aqui ainda consome capacidade de leitura e
compete com o tráfego ao vivo. Para uma mesa grande, prefira
Método 3 e remodele o dump.
Pegadinhas: DynamoDB JSON vs plana CSV
Qualquer que seja o método escolhido, o mesmo punhado de incompatibilidades entre os dados de DynamoDB modelo e um apartamento CSV vão te morder:
- Descritores de tipo. A saída Raw API / CLI / S3-export agrupa todos os valores
(
{"S": "..."},{"N": "123"}). Você o desembrulha por meio de um SDK ou remove o descreva você mesmo. O conjunto completo éS,N,B,BOOL,NULL,M,L,SS,NS,BS— veja DynamoDB tipos de dados. - Mapas e listas aninhados (
M,L) podem aninhar até 32 níveis de profundidade (AWS documentos: tipos de dados — lista e mapa "podem ser aninhados um no outro, para representar estruturas de dados complexas até 32 níveis de profundidade") e não possuem forma natural de coluna única. Decida com antecedência: JSON-codifique a célula ou exploda as chaves aninhadas em colunas com caminho de ponto (address.city). - Conjuntos (
SS/NS/BS) são coleções não ordenadas, não escalares — AWS avisa "a ordem dos valores dentro de um conjunto não é preservada" (tipos de dados) — então achate uma string delimitada e não confie na ordem dos elementos. - Atributos esparsos. DynamoDB não tem esquema, então dois itens podem ter diferentes atributos. Não há conjunto de colunas fixas; unir as chaves em todos os itens ou colunas ficarão desalinhadas. Esta é uma consequência direta design de tabela única, onde uma tabela contém vários formas de entidade.
- Paginação.
Scan(eQuery) retornam no máximo 1 MB por chamada. Se você não loop emLastEvaluatedKeyvocê exportará silenciosamente apenas a primeira página. Veja paginação. - Precisão numérica. DynamoDB números carregam até 38 dígitos de precisão e viajam como strings (AWS documentos: tipos de dados: “Os números podem ter até 38 dígitos de precisão”; "Todos os números são enviados através do rede para DynamoDB como strings"); software de planilha pode forçar números longos ou IDs em carros flutuantes e perdem dígitos. Mantenha-os como texto.
FAQ
Qual é a maneira mais rápida de exportar uma tabela DynamoDB para CSV? Uma GUI que faz o nivelamento para você: em DynoTable, filtre o tabela, pressione ⌘⇧E, escolha CSV e escolha um escopo - do selecionado linhas até cada item ao qual o filtro corresponde, transmitido de DynamoDB. Tipo descritores e valores aninhados são tratados automaticamente.
Como exporto uma tabela DynamoDB para CSV com a CLI AWS?
Scan a tabela e remodele a saída com jq (Método 2): aws dynamodb scan →
jq para remover o descritor de tipo de cada valor → @csv. Não há conhecimento de DynamoDB
--output csv, então você sempre faz a remoção de tipo sozinho e ele quebra no aninhado
mapas, listas e conjuntos.
Posso exportar uma tabela DynamoDB diretamente para CSV de AWS?
Não em uma etapa. O console e a exportação S3 gerenciada produzem DynamoDB JSON ou
Amazon Ion, nunca CSV. Você sempre precisa de uma etapa de conversão — CLI + jq, um script,
Athena/Glue sobre o dump S3 ou uma GUI que faz o nivelamento para você.
Como posso exportar uma tabela DynamoDB inteira sem afetar a produção?
Use o recurso exportar para S3 (Método 3). Ele é executado de forma assíncrona e consome
sem unidades de capacidade de leitura, por isso não compete com o tráfego ao vivo — ao contrário de um
Scan, que é medido em relação ao rendimento da sua tabela
(AWS documentos).
Requer que PITR esteja habilitado e exporte a tabela completa, não um subconjunto filtrado.
Como faço para exportar DynamoDB para S3 como CSV?
A exportação gerenciada grava apenas DynamoDB JSON / Ion em S3, então "to CSV" é um segundo
hop: registre o prefixo de exportação como uma tabela Athena (ou Glue) e escreva CSV de um
SELECIONE. Não há --export-format CSV.
Como faço para exportar DynamoDB para Excel?
Exporte primeiro para CSV (qualquer método acima) e, em seguida, abra o CSV no Excel - mantendo o tempo
IDs numéricos como texto para que não sejam forçados a flutuar. Não há .xlsx direto
exportar de DynamoDB; DynoTable salva a visualização atual diretamente em um
pronto para planilha CSV.
Por que meu JSON exportado tem {"S": ...} e {"N": ...} em todos os lugares?
Isso é DynamoDBformato wire - cada valor é marcado com um tipo
descritor. Desempacote-o com um SDK, o
Conversor DynamoDB JSON ou uma GUI antes de escrever
CSV. O formato da ligação é o mesmo, quer os dados venham do API, da CLI ou do
Exportação S3.
Navegue, filtre e exporte suas próprias tabelas para CSV com DynoTable, ou desembrulhe uma amostra de DynamoDB JSON no Conversor JSON primeiro.


