Ich muss regelmäßig einen Großteil der Daten in eine MySQL-Datenbank aus CSV-Dateien hochladen. Ich habe dies getan, indem ich einfach LOAD DATA INFILE aus Bash-Skripten ausgeführt habe. Jetzt sollen die Daten jedoch auf mehrere Tabellen verteilt werden und Beziehungen beibehalten werden. Was sind allgemeine Strategien in solchen Fällen?Bulk-Einfügung von MySQL bezogenen Tabellen aus Bash
Nehmen wir eine anfänglich einfache Aufgabe an: Relation eins-zu-viele, zwei Tabellen.
Ich halte so etwas wie:
- für Tisch maximal identyfier bekommt 1
- manuell Identifikatoren in dem CSV-Datei
- Splitting die Datei mit zwei Zieltabellen im Auge
- Anwendung beiden Tabellen einfügen
Ist es eine optimale Lösung? (Im wirklichen Fall zum Beispiel werde ich viele n-zu-viele Beziehungen haben, die auf diese Weise aktualisiert werden.)
Kann ich die Tabelle 1 von der Ebene der Bash für die Dauer des gesamten Prozesses sperren ? Oder muss ich ein intermediäres Werkzeug wie Perl oder Python verwenden, um alle Dinge in einer Sitzung zu behalten?
Ausgezeichnete erste Post! Ihre Antwort hängt davon ab, ob Sie ein Immon (ite) oder ein Kimball (ite) sind, Kimballs Data Warehouse Toolkit (Buch) (http://www.amazon.com/The-Data-Warehouse-Toolkit-Dimensional/dp/). 0471200247/ref = sr_1_1? S = Bücher & ie = UTF8 & qid = 1334075383 & sr = 1-1) argumentiert, dass die künstlichen Schlüssel vom System erzeugt werden sollen. Oder versuche einen alternativen Ansatz, der für mich gut funktioniert hat. Behalten Sie eine Reihe separater "Eingabe" -Tabellen, importieren Sie die aktuelle Datei in die leere Eingabetabelle und führen Sie dann die gespeicherte Prozedur aus, um sie in Haupttabellen zusammenzuführen. Viel Glück. – shellter
Verwenden Sie awk, um die Daten vorzuverarbeiten/aufzuteilen und nur Daten in die geteilten Dateien zu laden. Wenn Sie mehr Details wünschen, müssen Sie selbst etwas bereitstellen. – Kevin