Exportieren von SQL-Server-Tabelle auf mehrere Teil-Dateien
Ich brauche zu exportieren, eine Recht große SQL-Server-Tabelle ~100GB in eine CSV-Datei. Aber anstatt die Ausgabe einer einzigen csv-Datei, sollte es idealerweise mehrere Dateien sagen wir 10 Dateien mit jeweils 10 GB.
Ich sehe BCP hat eine batch_size argument aber noch schreibt alle Daten in eine einzelne Datei? Gibt es noch andere freie Werkzeuge für das tun, was ich verlange? Entweder dort, wo die Größe der Datei angegeben werden kann, in bytes oder die Anzahl der Zeilen?
Für wenig Kontext ist das so die Daten können kombiniert werden mit anderen Quellen in einen Hive/Hadoop-Plattform, so dass, wenn es gibt bessere Möglichkeiten, den Export der Daten bin ich offen für Vorschläge.
Seine 2012 enterprise
InformationsquelleAutor Jon | 2013-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie könnte verwenden von SQL 2012 ist paging-Funktionen
OFFSET
undFETCH
in Verbindung mit bcp:InformationsquelleAutor Hart CO
BCP batch_size argument steuert nicht den Ausgang, leider.
Weise, wie ich es getan habe, diese Art der Spaltung:
1 - Einfache, aber nicht reproduzierbare: Erstellen Sie eine Kommando-Datei (.cmd), das einen mehrere
BCP
s in der Tabelle für eine bestimmte Zeile reicht. Dies ist wahrscheinlich erfordert eineIDENTITY(1,1)
basiert Primärschlüssel auf der Tabelle.2 - Einfache und wiederholbare, verwendet eine Menge von disk:
BCP
den gesamten Tisch in einer einzigen Datei, und verwenden Siesplit
zu schaffen, so viele neue Dateien bei Bedarf mit einer bestimmten Anzahl von bytes in jedem (Hinweis: die Aufteilung von Linien wäre eine bessere Idee IMO). Verwenden Sie 'Cygwin' (GnuWin32 nicht mehr gepflegt) zu installierensplit
- und andere Dienstprogramme, die Sie wollen.Generiert die folgenden Dateien
3 - Komplex, aber wiederholbar, erfordert möglicherweise unsichere T-SQL: Verwenden Sie die
xp_cmdshell
- Funktion aufrufen, BCP innerhalb einer gespeicherten Prozedur durchläuft die Tabelle.LETZTE ANMERKUNG: Wenn Sie eines NVARCHAR-Felder in Ihren Daten, dann müssen Sie die
-w
flag und sich bewusst sein, dass die Ausgabe in UTF-16LE. Ich würde stark empfehlen konvertieren, auf UTF-8 miticonv
(von 'Cygwin' wieder), bevor Sie versuchen, etwas zu tun, die in Hadoop.InformationsquelleAutor Joe Harris
Wenn du hast eine einzige sortierbare Primärschlüssel-Feld, die Sie finden konnte, dass die Tasten definieren die Grenzen der Zeilen, die Sie wollen, dann WÄHLEN Sie einfach die Datensätze mit einer WHERE -, definiert die Grenzen.
Es ist ähnlich zu dem, was Joe legen für die #1, aber Ihr Schlüssel muss nicht zusammenhängend sein, noch numerisch. Das folgende ist ein einfaches Beispiel:
InformationsquelleAutor gazzman
Ich würde exportieren Sie zuerst die Datei und dann teilen Sie Sie extern. Vorausgesetzt, Sie laufen auf einem Windows-Rechner, es gibt mehrere "free-ware" - tools gibt, die helfen können. Sehen diese andere Antwort auf Superuser für mehr info.
InformationsquelleAutor BellevueBob