Ist es möglich, die Header bei Verwendung von MySQL irgendwie einzuschließen INTO OUTFILE
?
mysql
into-outfile
Brett
quelle
quelle
ORDER BY
in derSELECT
Klausel gibt. Die Kopfzeile kann sich je nach Reihenfolge an einer beliebigen Stelle in der generierten Datei befinden.Die von Joe Steanelli bereitgestellte Lösung funktioniert, aber das Erstellen einer Liste von Spalten ist unpraktisch, wenn Dutzende oder Hunderte von Spalten beteiligt sind. Hier erfahren Sie , wie Sie die Spaltenliste der Tabelle my_table in my_schema abrufen .
Jetzt können Sie die resultierende Zeile als erste Anweisung in Joes Methode kopieren und einfügen.
quelle
ORDER BY ORDINAL_POSITION
kümmert sich darumGROUP_CONCAT(CONCAT('"',COLUMN_NAME,'"') order BY ORDINAL_POSITION)
Für die komplexe Auswahl mit ORDER BY verwende ich Folgendes:
quelle
Sie können eine vorbereitete Anweisung mit der Antwort von lucek verwenden und eine dynamische Tabelle mit dem Spaltennamen in CSV exportieren:
Danke lucek.
quelle
Dadurch können Sie Spalten und / oder ein Limit bestellt haben
quelle
Query OK, 100 rows affected (14.72 sec)
Zweiter Durchgang mit IhremQuery OK, 101 rows affected (0.00 sec)
Ich mache einfach 2 Abfragen, erstens, um eine Abfrageausgabe (Limit 1) mit Spaltennamen (kein Hardcode, keine Probleme mit Joins, Sortieren nach, benutzerdefinierten Spaltennamen usw.) zu erhalten, und zweitens, um eine Abfrage selbst durchzuführen und Dateien in einer CSV zu kombinieren Datei:
quelle
Beim Ausführen der MySQL-Abfrage für große Tabellen in NodeJS trat ein ähnliches Problem auf. Der Ansatz, mit dem ich Header in meine CSV-Datei aufgenommen habe, ist wie folgt
Verwenden Sie die Abfrage OUTFILE, um eine Datei ohne Header vorzubereiten
Rufen Sie die Spaltenüberschriften für die in Punkt 1 verwendete Tabelle ab
Hängen Sie die Spaltenüberschriften an die in Schritt 1 erstellte Datei mit an Paket npm " prepend-file" erstellt wurde
Die Ausführung jedes Schritts wurde unter Verwendung von Versprechungen in NodeJS gesteuert.
quelle
Dies ist ein alternativer Cheat, wenn Sie mit Python oder R vertraut sind und Ihre Tabelle in den Speicher passen kann.
Importieren Sie die SQL-Tabelle in Python oder R und exportieren Sie sie von dort als CSV. Sie erhalten dann die Spaltennamen sowie die Daten.
So mache ich es mit R, erfordert die RMySQL-Bibliothek:
Es ist ein kleiner Betrug, aber ich fand, dass dies eine schnelle Problemumgehung war, als meine Anzahl von Spalten zu lang war, um die oben beschriebene Concat-Methode zu verwenden. Hinweis: R fügt am Anfang der CSV eine Spalte 'row.names' hinzu, sodass Sie diese Spalte löschen möchten, wenn Sie sich beim Neuerstellen der Tabelle auf die CSV verlassen müssen.
quelle
Also, wenn alle Spalten in
my_table
einem Zeichendatentyp sind , können wir die Top-Antworten (von Joe, matt und evilguc) miteinander zu verknüpfen, wird der Header automatisch in einer ‚einfachen‘ SQL - Abfrage hinzugefügt werden, zBwo die letzten paar Zeilen die Ausgabe csv machen.
Beachten Sie, dass dies langsam sein kann, wenn
my_table
es sehr groß ist.quelle
Ich denke, wenn Sie eine UNION verwenden, wird es funktionieren:
Ich kenne keine Möglichkeit, die Header mit der INTO OUTFILE-Syntax direkt anzugeben.
quelle
Eigentlich können Sie es sogar mit einem ORDER BY zum Laufen bringen.
Benötigt nur einige Tricks in der Reihenfolge nach Anweisung - wir verwenden eine case-Anweisung und ersetzen den Header-Wert durch einen anderen Wert, der garantiert zuerst in der Liste sortiert wird (dies hängt natürlich vom Feldtyp ab und davon, ob Sie ASC oder sortieren) DESC)
Angenommen, Sie haben drei Felder, name (varchar), is_active (bool), date_something_happens (date), und Sie möchten die zweiten beiden absteigend sortieren:
quelle
Da die Funktion "Include-Header" noch nicht integriert zu sein scheint und die meisten "Lösungen" hier die Spaltennamen manuell eingeben und / oder Verknüpfungen nicht einmal berücksichtigen müssen, würde ich empfehlen das Problem umgehen .
Die beste Alternative, die ich bisher gefunden habe, ist die Verwendung eines anständigen Tools (ich verwende HeidiSQL ).
Stellen Sie Ihre Anfrage, wählen Sie das Raster aus, klicken Sie mit der rechten Maustaste und exportieren Sie es in eine Datei. Es hat alle notwendigen Optionen für einen sauberen Export und sollte die meisten Anforderungen erfüllen.
In der gleichen Idee funktioniert der Ansatz von user3037511 einwandfrei und kann einfach automatisiert werden .
Starten Sie einfach Ihre Anfrage mit einer Befehlszeile , um Ihre Header zu erhalten. Sie können die Daten mit einem SELECT INTO OUTFILE abrufen ... oder indem Sie Ihre Abfrage ohne das Limit ausführen, das Sie auswählen können.
Beachten Sie, dass die Umleitung der Ausgabe in eine Datei sowohl unter Linux als auch unter Windows wie ein Zauber wirkt.
Aus diesem Grund möchte ich hervorheben, dass ich in 80% der Fälle, wenn ich SELECT FROM INFILE oder SELECT INTO OUTFILE verwenden möchte, am Ende etwas anderes verwende aufgrund einiger Einschränkungen (hier das Fehlen von "Header-Optionen") ein AWS-RDS, die fehlenden Rechte usw.)
Daher kann genau beantworten , die ich nicht auf die op Frage ... aber es sollte seine Antwort Bedürfnisse :)
EDIT: und tatsächlich seine Frage zu beantworten: Nein
Ab 2017.09.07, die Sie gerade nicht Header enthalten können , wenn Sie Halten Sie sich an den Befehl SELECT INTO OUTFILE : |
quelle
ein Beispiel aus meiner Datenbank Tabellenname Sensor mit colums (id, Zeit, Einheit)
quelle
Ich habe meinen Code in PHP geschrieben, und ich hatte ein paar Probleme mit der Verwendung von Concat- und Union-Funktionen und habe auch keine SQL-Variablen verwendet.
quelle
Hier ist eine Möglichkeit, die Headertitel dynamisch aus den Spaltennamen abzurufen.
quelle
Ich möchte die Antwort von Sangam Belose ergänzen. Hier ist sein Code:
Wenn Sie Ihre
"secure_file_priv"
Variablen jedoch nicht eingerichtet haben , funktioniert dies möglicherweise nicht. Überprüfen Sie dazu den Ordner, der für diese Variable festgelegt wurde, indem Sie:Die Ausgabe sollte folgendermaßen aussehen:
Sie können diese Variable entweder ändern oder die Abfrage ändern, um die Datei in den angezeigten Standardpfad auszugeben.
quelle
MySQL allein reicht nicht aus, um dies einfach zu tun. Unten finden Sie ein PHP-Skript, das Spalten und Daten an CSV ausgibt.
Geben Sie oben Ihren Datenbanknamen und Ihre Tabellen ein.
Dies muss das Verzeichnis sein, in das Sie ausgeben möchten. MySQL muss in der Lage sein, in das Verzeichnis zu schreiben.
Sie können die CSV-Exportoptionen in der Abfrage bearbeiten:
Am Ende gibt es einen Exec-Aufruf an GZip der CSV.
quelle
quelle