Come esportare una tabella DynamoDB in CSV (4 modi)
DynamoDB non ha un pulsante nativo "esporta in CSV". Ogni valore ritorna avvolto
Marshalling di DynamoDB JSON — {"S": "..."},
{"N": "123"}, {"M": {...}} — e una tabella può contenere mappe nidificate, elenchi e
insiemi senza evidente rappresentazione a colonne piatte. Quindi "esporta DynamoDB in CSV" lo è
in realtà due problemi: tirare fuori gli elementi, quindi appiattire il JSON digitato in
righe. Né la console né l'esportazione gestita eseguono il secondo passaggio per te.
Questa guida inizia con il modo in cui vengono eseguiti entrambi i passaggi per te, quindi copre il tre percorsi di AWS-tooling e quando ognuno è la chiamata giusta.
Come posso esportare una tabella DynamoDB in CSV?
Apri la tabella in DynoTable, filtra in base alle righe
che desideri ed esporta il risultato in CSV con un clic: digita i descrittori
valori scartati e nidificati appiattiti per te
(Metodo 1). Costruendolo da AWS
strumenti invece: scansiona con la CLI e rimodella con jq per una piccola tabella
(Metodo 2), utilizzare l'esportazione S3 gestita per grandi
tabelle (Metodo 3) oppure scrivi un
script breve quando è necessaria una modellatura personalizzata
(Metodo 4).
- Filtrato/formato CSV (un sottoinsieme di colonne, solo alcuni elementi): una GUI export (Metodo 1) o uno script. L'esportazione S3 gestita fornisce l'intera tabella, senza filtri.
- Tabella piccola, ad hoc, solo terminale: AWS CLI
scan+jq(Metodo 2). Va bene finché non vengono visualizzati gli attributi nidificati su. - Tabella di grandi dimensioni (GB+): DynamoDB esporta in S3 (Metodo 3), quindi convertire il file discarica. Funziona in modo asincrono e non consuma nessuna capacità di lettura, ma... uscite DynamoDB JSON, non CSV.
Metodo 1: esportazione con un clic in DynoTable
DynoTable tratta l'esportazione come parte della navigazione: esegui o filtro una query, premi ⌘⇧E (o il pulsante Esporta nella barra degli strumenti della scheda) e scegli cosa pubblicare:
- Formati: CSV (una riga per articolo, con intestazioni: imposta serializza come
JSON array all'interno di una cella), JSON e NDJSON. JSON/NDJSON vieni
senza marshalling (semplice
"count": 3) o con marshalling DynamoDB-JSON quando si necessitano di un viaggio di andata e ritorno senza perdite che preservi grandi numeri. - Ambiti: le righe attualmente caricate, solo la tua selezione, o il corrispondenza filtro completo: ogni elemento corrispondente alla tua query, trasmesso direttamente in streaming da DynamoDB anziché solo ciò che è sullo schermo. Quest'ultimo è il l'esportazione filtrata che lo snapshot S3 gestito non può eseguire.
- Destinazione: appunti o file. Per acquisti una tantum, fai clic con il pulsante destro del mouse su una riga e Copia come... inserisce CSV, JSON, NDJSON, o DynamoDB-JSON direttamente sulla appunti, nessuna finestra di dialogo.

Vengono gestiti i problemi di appiattimento che interrompono i percorsi DIY seguenti: type i descrittori vengono scartati, le mappe e gli elenchi annidati vengono appiattiti e rinominati le colonne scorrono fino alle intestazioni CSV. Grandi esportazioni si staccano e si incastrano lo sfondo: trasmesso in streaming sul disco riga per riga, con cambi di scheda sopravvissuti e anche il ricaricamento di un'app, quindi un'esportazione di più gigabyte non deve mai adattarsi alla memoria.
È un client desktop DynamoDB, lo stesso strumento che già usi per navigare nel file tabella; guarda come si confronta con altre DynamoDB GUI. Quando non lo useresti? Quando l'esportazione deve essere eseguita in modo automatico in a pipeline: questo è il percorso dello script (Metodo 4) è per.
Metodo 2: AWS Scansione CLI + jq
Per una tabella piccola puoi scansionarla e rimodellare l'output con jq. Si legge "Scan".
ogni elemento nella tabella e lo restituisce in pagine fino a 1 MB; la CLI
segue automaticamente l'impaginazione
(AWS documenti: Scanning tabelle).
aws dynamodb scan --table-name MyTable --output json \
| jq -r '.Items[] | [.id.S, .name.S, .price.N] | @csv' \
> out.csvIl problema sta nella riga jq: devi scrivere a mano .id.S, .name.S,
.price.N: supera il descrittore di tipo di ciascun attributo (S, N, B,
BOOL, M, L, SS, NS, BS) per ottenere il valore grezzo. È gestibile per a
tabella piatto con tre colonne stringate. Cade a pezzi nel momento in cui hai:
- Mappe/elenchi nidificati —
{"M": {...}}o{"L": [...]}non hanno una singola colonna su cui appiattire;@csvsi blocca oppure codifichi la cella con JSON manualmente. - Sets —
{"SS": ["a","b"]}è un array, non uno scalare. - Attributi sparsi — DynamoDB non è schematico, quindi l'articolo A può avere un
prezzoe l'articolo B potrebbe non esserlo. L'elenco di colonne fisse elimina o disallinea silenziosamente le colonne.
Inoltre, non esiste alcun --output csv: i formati di output della CLI sono json,
yaml, text, table e off, nessuno dei quali comprende i tipi DynamoDB. Quindi tu
è ancora necessario jq (o uno script) per rimuovere i tag type. Questo è il motivo principale per cui "export
Dalla tabella DynamoDB a CSV tramite AWS CLI" non è mai una riga oltre il caso banale.
Per esportare un'intera tabella più grande in questo modo senza impiegare tutto il giorno, parallelizza il file
scansiona con --segment / --total-segments
(AWS documenti: scansione parallela —
DynamoDB "assegna gli elementi a segmenti applicando una funzione hash a ciascun elemento
chiave di partizione", quindi i segmenti possono essere irregolari) e leggere
pagination in modo da non fermarti alla prima pagina da 1 MB.
Metodo 3: DynamoDB esporta in S3 (tabelle di grandi dimensioni)
Per tabelle di qualsiasi dimensione reale, l'esportazione gestita su Amazon S3 è lo strumento giusto.
Esporta uno snapshot da qualsiasi punto del ripristino point-in-time (PITR)
window - quindi PITR deve essere prima abilitato sulla tabella, altrimenti l'esportazione fallirà
PointInTimeRecoveryUnavailableException —
funziona in modo asincrono,
e non consuma unità di capacità di lettura, quindi non ha alcun impatto sulla tabella
velocità effettiva o disponibilità (AWS documenti:
"Le esportazioni sono asincrone, non consumano unità di capacità di lettura (RCUs) e non hanno
impatto sulle prestazioni e sulla disponibilità della tabella"; "Devi abilitare PITR sulla tua tabella
per utilizzare la funzionalità di esportazione"). Questo è anche ciò che Esporta su S3 della console
l'azione si innesca sotto il cofano: la console è solo un front-end per lo stesso API,
quindi porta lo stesso requisito PITR e lo stesso output 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_JSONL'unico problema: l'esportazione S3 non restituisce CSV. Scrive DynamoDB JSON
o solo Amazon Ion, come file compressi in formato g
Formato JSON-lines (un elemento per riga), più manifest
file (AWS documenti: formato di output di esportazione —
i file di dati sono scritti come .json.gz, "il formato è JSON righe", accanto
manifest-summary.json / manifest-files.json). Hai ancora bisogno di una fase di conversione
successivamente:
- Athena / Glue legge direttamente il DynamoDB JSON esportato - punta una tabella verso
Prefisso S3, quindi scrivi CSV da un
SELECT(questo è il solito "esporta DynamoDB a S3 quindi alla pipeline CSV"). AWS nota che "molti servizi AWS, come Athena e AWS Glue, analizzerà questo formato automaticamente" (formato di output di esportazione). - Crea il tuo: decomprimi i file
.gz, analizza ogni riga JSON e appiattisci it (stesso problema di appiattimento di ogni altro metodo).
È anche uno snapshot di tabella completa: non c'è nessun filtro lato server da esportare solo alcuni articoli. Se hai bisogno di un sottoinsieme, filtra dopo il fatto in Athena o tu utilizzare invece una GUI (Metodo 1) / script.
Metodo 4: uno script veloce (boto3/Node)
Quando l'esportazione deve essere eseguita non presidiata (un lavoro notturno, un passaggio CI) un piccolo
lo script batte tutto quanto sopra. La vittoria è che gli AWS SDK
unmarshall digitato JSON per te: l'interfaccia delle risorse di boto3 e l'SDK JS
DynamoDBDocumentClient restituisce {"price": 2000} invece di
{"price": {"N": "2000"}} (l'interfaccia delle risorse di boto3 rende "la digitazione dei dati
implicito", secondo il
AWS Guida Python;
JS DocumentClient "converte i dati di risposta annotati in tipi JavaScript nativi",
per @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})Hai ancora due decisioni che l'SDK non può prendere per te: come appiattire i file nidificati
mappe/elenchi in colonne (JSON-codifica la cella? percorso delle chiavi?) e cosa fare
con attributi sparsi (qui una chiave mancante diventa una cella vuota tramite r.get(k)).
E non eliminare il ciclo LastEvaluatedKey: una singola chiamata a scan() restituisce solo il file
prima pagina da 1 MB, quindi senza di essa esporti silenziosamente parte della tabella.
Stesso avvertimento del Metodo 2: una scansione di una tabella completa consuma comunque capacità di lettura e
compete con il traffico in tempo reale. Per una tabella grande, preferisci
Metodo 3 e rimodellare il dump.
Gotchas: DynamoDB JSON contro piatto CSV
Qualunque sia il metodo scelto, si riscontrano sempre le stesse discrepanze tra i dati di DynamoDB modello e un flat CSV ti morderà:
- Descrittori di tipo. L'output raw API / CLI / S3-export racchiude ogni valore
(
{"S": "..."},{"N": "123"}). Puoi scartarlo tramite un SDK o rimuovere il file descrittore te stesso. Il set completo èS,N,B,BOOL,NULL,M,L,SS,NS,BS— vedi tipi di dati DynamoDB. - Mappe ed elenchi nidificati (
M,L) possono nidificare fino a 32 livelli di profondità (AWS documenti: tipi di dati — list e map "possono essere nidificati l'uno nell'altro, per rappresentare strutture di dati complesse fino a 32 livelli di profondità") e non hanno una forma naturale a colonna singola. Decidi in anticipo: JSON: codifica la cella o esplodi le chiavi nidificate in colonne con percorso punto (address.city). - Gli Insiemi (
SS/NS/BS) sono raccolte non ordinate, non scalari — AWS avverte "l'ordine dei valori all'interno di un set non viene preservato" (tipi di dati) — quindi appiattisci su una stringa delimitata e non fare affidamento sull'ordine degli elementi. - Attributi sparsi. DynamoDB è senza schema, quindi due elementi possono avere valori diversi attributi. Non esiste un set di colonne fisso; unisci le chiavi di tutti gli elementi o le colonne saranno disallineate. Questa è una conseguenza diretta di design a tabella singola, dove una tabella ne contiene diversi forme di entità.
- Impostazione.
Scan(eQuery) restituiscono al massimo 1 MB per chiamata. Se non lo fai loop su "LastEvaluatedKey" esporterai silenziosamente solo la prima pagina. Vedi impaginazione. - Precisione del numero. I numeri DynamoDB contengono fino a 38 cifre di precisione e viaggiare come stringhe (AWS documenti: tipi di dati: "I numeri possono avere fino a 38 cifre di precisione"; "Tutti i numeri vengono inviati attraverso il rete a DynamoDB come stringhe"); il software per fogli di calcolo può forzare numeri lunghi o Gli ID vengono trasformati in float e perdono cifre. Conservateli come testo.
FAQ
Qual è il modo più veloce per esportare una tabella DynamoDB in CSV? Una GUI che esegue l'appiattimento per te: in DynoTable, filtra il tabella, premi ⌘⇧E, seleziona CSV e scegli un ambito, dall'ambito selezionato righe fino a ogni elemento corrispondente al filtro, trasmesso in streaming da DynamoDB. Digitare i descrittori e i valori nidificati vengono gestiti automaticamente.
Come posso esportare una tabella DynamoDB in CSV con la AWS CLI?
Scan la tabella e rimodella l'output con jq (metodo 2): aws dynamodb scan →
jq per eliminare il descrittore del tipo di ciascun valore → @csv. Non c'è DynamoDB consapevole
--output csv, quindi esegui sempre la rimozione del tipo da solo e si interrompe su nidificato
mappe, elenchi e insiemi.
Posso esportare una tabella DynamoDB direttamente in CSV da AWS?
Non in un solo passaggio. La console e l'esportazione S3 gestita producono entrambe DynamoDB JSON o
Amazon Ion, mai CSV. Hai sempre bisogno di un passaggio di conversione: CLI + jq, uno script,
Athena/Incolla sul dump S3 o su una GUI che esegue l'appiattimento per te.
Come posso esportare un'intera tabella DynamoDB senza influire sulla produzione?
Utilizza la funzione esporta in S3 (metodo 3). Funziona in modo asincrono e consuma
nessuna unità di capacità di lettura, quindi non compete con il traffico in tempo reale, a differenza di a
Scan, che viene misurato rispetto al throughput della tua tabella
(AWS documenti).
Richiede che PITR sia abilitato ed esporta la tabella completa, non un sottoinsieme filtrato.
Come posso esportare DynamoDB su S3 come CSV?
L'esportazione gestita scrive solo DynamoDB JSON / Ion su S3, quindi "to CSV" è un secondo
hop: registra il prefisso di esportazione come tabella Athena (o Glue) e scrivi CSV da a
"SELEZIONA". Non esiste --export-format CSV.
Come posso esportare DynamoDB in Excel?
Esporta prima in CSV (qualsiasi metodo sopra), quindi apri CSV in Excel, mantenendo a lungo
ID numerici come testo in modo che non siano forzati a float. Non esiste un .xlsx diretto
esportazione da DynamoDB; DynoTable salva la vista corrente direttamente in a
pronto per il foglio di calcolo CSV.
Perché il mio JSON esportato ha {"S": ...} e {"N": ...} ovunque?
Questo è DynamoDBformato wire: ogni valore è contrassegnato con un tipo
descrittore. Annulla il marshalling con un SDK, il file
DynamoDB JSON convertitore o una GUI prima di scrivere
CSV. Il formato del cavo è lo stesso indipendentemente dal fatto che i dati provengano da API, CLI o
Esportazione S3.
Sfoglia, filtra ed esporta le tue tabelle in CSV con DynoTable, oppure scartare un campione di DynamoDB JSON nel JSON convertitore per primo.


