Ich habe 1000 CSV-Dateien. Jede CSV-Datei ist zwischen 1 und 500 MB groß und wird auf dieselbe Weise formatiert (dh in derselben Spaltenreihenfolge). Ich habe eine Header-Datei für Spaltenüberschriften, die mit den Spaltennamen meiner DynamoDB-Tabelle übereinstimmen. Ich muss diese Dateien in eine DynamoDB-Tabelle importieren. Was ist der beste Weg / das beste Werkzeug dafür?
Ich kann diese CSV-Dateien zu einer einzigen riesigen Datei verketten (ich würde es jedoch lieber vermeiden) oder sie bei Bedarf in JSON konvertieren. Ich bin mir der Existenz von BatchWriteItem bewusst, daher würde eine gute Lösung das Schreiben von Stapeln beinhalten.
Beispiel:
- Die DynamoDB-Tabelle enthält zwei Spalten: Vorname, Nachname
- Die Header-Datei enthält nur:
first_name,last_name
- Eine CSV-Datei sieht aus wie
::
John,Doe
Bob,Smith
Alice,Lee
Foo,Bar
Antworten:
Am Ende habe ich eine Python-Funktion codiert
import_csv_to_dynamodb(table_name, csv_file_name, colunm_names, column_types)
, die eine CSV in eine DynamoDB-Tabelle importiert. Spaltennamen und Spalten müssen angegeben werden. Es verwendet Boto und lässt sich von diesem Kern sehr inspirieren . Unten finden Sie die Funktion sowie eine Demo (main()
) und die verwendete CSV-Datei. Getestet unter Windows 7 x64 mit Python 2.7.5, sollte aber auf jedem Betriebssystem mit Boto und Python funktionieren.test.csv
Inhalt (muss sich im selben Ordner wie das Python-Skript befinden):quelle
Die vorherige Antwort wurde geringfügig geändert, um das CSV-Modul zu verwenden, sodass Ihre CSV-Datei Zeichenfolgen mit Anführungszeichen unterstützen kann.
quelle
Dieses NPM-Paket konvertiert einen Arbitray-JSON in eine PUT-Anforderung für DynamoDB. https://www.npmjs.com/package/json-dynamo-putrequest
Auf jeden Fall einen Versuch wert.
quelle
Ich empfehle Ihnen, den AWS Database Migration Service (DMS) zu verwenden.
Wie in diesem Artikel beschrieben: https://aws.amazon.com/es/blogs/database/migrate-delimited-files-from-amazon-s3-to-an-amazon-dynamodb-nosql-table-using-aws- Datenbank-Migrations-Service-und-aws-Cloudformation / Sie können S3 als Ursprung und DynamoDB als Ziel verwenden, um CSV-Dateien mit vielen Tupeln zu importieren.
Ich habe erfolgreich einen vollständigen Importprozess von S3 in DynamoDB implementiert und bin der einfachste und schnellste Weg, dies zu tun.
Im Wesentlichen müssen Sie:
Durch Ändern des DynamoDB-Tabellenturchsatzes auf 25 Lesekapazitätseinheiten und 150 Schreibkapazitätseinheiten konnte ich in weniger als 7 Minuten mehr als 124.000 Tupel einfügen, einschließlich Ihrer Vorbereitungsaufgaben.
Die Hauptempfehlung von AWS für diese Aufgabe ist die Verwendung des Datenpipeline-Dienstes. Ich habe ihn jedoch verwendet und er ist teurer. Die zugrunde liegende Initialisierung des EMR-Culsters ist ein sehr langsamer Prozess. Wenn Sie diese Importaufgabe nicht wiederholen möchten, verwenden Sie DMS stattdessen.
quelle