Czy można w jakiś sposób dołączyć nagłówki podczas korzystania z MySQL INTO OUTFILE
?
mysql
into-outfile
Brett
źródło
źródło
ORDER BY
wSELECT
klauzuli występuje. Linia nagłówka może znajdować się w dowolnym miejscu w wygenerowanym pliku, w zależności od kolejności.Rozwiązanie dostarczone przez Joe Steanelli działa, ale tworzenie listy kolumn jest niewygodne, gdy w grę wchodzą dziesiątki lub setki kolumn. Oto jak uzyskać listę kolumn tabeli my_table w my_schema .
Teraz możesz skopiować i wkleić wynikowy wiersz jako pierwszą instrukcję w metodzie Joe.
źródło
ORDER BY ORDINAL_POSITION
sobie z tym poradziGROUP_CONCAT(CONCAT('"',COLUMN_NAME,'"') order BY ORDINAL_POSITION)
Dla złożonego wyboru z ORDER BY używam:
źródło
Możesz użyć przygotowanego zestawienia z odpowiedzią lucka i dynamicznie wyeksportować tabelę z nazwami kolumn w CSV:
Dziękuję Lucku.
źródło
Umożliwi to uporządkowanie kolumn i / lub ograniczenie
źródło
Query OK, 100 rows affected (14.72 sec)
Drugie podanie TwoimQuery OK, 101 rows affected (0.00 sec)
Po prostu wykonuję 2 zapytania, najpierw, aby uzyskać wynik zapytania (limit 1) z nazwami kolumn (bez kodu stałego, żadnych problemów z połączeniami, kolejnością, niestandardowymi nazwami kolumn itp.), A po drugie, aby wykonać zapytanie i połączyć pliki w jeden plik CSV plik:
źródło
Z podobnym problemem spotkałem się podczas wykonywania zapytania mysql na dużych tabelach w NodeJS. Podejście, które zastosowałem, aby dołączyć nagłówki do mojego pliku CSV, jest następujące
Użyj zapytania OUTFILE, aby przygotować plik bez nagłówków
Pobierz nagłówki kolumn dla tabeli użytej w punkcie 1
Dołącz nagłówki kolumn do pliku utworzonego w kroku 1 przy użyciu pakietu npm przedpend-file
Wykonanie każdego kroku było kontrolowane za pomocą obietnic w NodeJS.
źródło
Jest to alternatywny kod, jeśli znasz język Python lub R, a Twój stół mieści się w pamięci.
Zaimportuj tabelę SQL do języka Python lub R, a następnie wyeksportuj stamtąd jako plik CSV, a otrzymasz nazwy kolumn oraz dane.
Oto jak to robię używając R, wymaga biblioteki RMySQL:
To trochę oszustwo, ale stwierdziłem, że było to szybkie obejście, gdy moja liczba kolumn była zbyt długa, aby użyć powyższej metody konkatacji. Uwaga: R doda kolumnę „row.names” na początku pliku CSV, więc zechcesz ją usunąć, jeśli musisz polegać na pliku CSV w celu odtworzenia tabeli.
źródło
Tak więc, jeśli wszystkie kolumny
my_table
są typu znakowego , możemy połączyć najlepsze odpowiedzi (Joe, Matt i evilguc) razem, aby nagłówek został dodany automatycznie w jednym „prostym” zapytaniu SQL, np.gdzie ostatnie kilka wierszy tworzy wynik csv.
Zauważ, że może to być powolne, jeśli
my_table
jest bardzo duże.źródło
Myślę, że jeśli użyjesz UNION, to zadziała:
Nie znam sposobu bezpośredniego określenia nagłówków za pomocą składni INTO OUTFILE.
źródło
Właściwie możesz sprawić, by działało nawet z ORDER BY.
Potrzebuje tylko trochę sztuczek w kolejności według instrukcji - używamy instrukcji case i zastępujemy wartość nagłówka inną wartością, która gwarantuje pierwsze sortowanie na liście (oczywiście zależy to od typu pola i tego, czy sortujesz ASC, czy DESC)
Załóżmy, że masz trzy pola, name (varchar), is_active (bool), date_something_happens (date) i chcesz posortować dwa drugie malejąco:
źródło
Ponieważ funkcjonalność „nagłówków dołączania” nie wydaje się być jeszcze wbudowana, a większość „rozwiązań” wymaga ręcznego wpisywania nazw kolumn i / lub nawet nie bierze pod uwagę złączeń, radziłbym obejść problem .
Najlepszą alternatywą, jaką do tej pory znalazłem, jest użycie przyzwoitego narzędzia (używam HeidiSQL ).
Umieść swoje żądanie, wybierz siatkę, kliknij prawym przyciskiem myszy i wyeksportuj do pliku. Posiada wszystkie niezbędne opcje do czystego eksportu i powinien obsługiwać większość potrzeb.
W tym samym pomyśle podejście user3037511 działa dobrze i można je łatwo zautomatyzować .
Po prostu uruchom swoje żądanie za pomocą wiersza poleceń, aby uzyskać nagłówki. Możesz uzyskać dane za pomocą SELECT INTO OUTFILE ... lub uruchamiając zapytanie bez ograniczeń, do wyboru.
Zauważ, że przekierowanie wyjścia do pliku działa jak urok zarówno w systemie Linux, jak i Windows.
To sprawia, że chcę podkreślić, że w 80% przypadków, gdy chcę użyć SELECT FROM INFILE lub SELECT INTO OUTFILE, w końcu używam czegoś innego z powodu pewnych ograniczeń (tutaj brak opcji nagłówków, na AWS-RDS, brakujące prawa i tak dalej.)
Stąd, nie dokładnie odpowiedzieć na PO za pytanie ... ale powinien odpowiadać jego potrzeb :)
EDIT: i rzeczywiście odpowiedzieć na jego pytanie: no
jak z 2017-09-07, po prostu nie może zawierać nagłówki jeśli ciebie trzymaj się polecenia SELECT INTO OUTFILE : |
źródło
przykład z czujnika nazwy tabeli w mojej bazie danych z kolumnami (id, czas, jednostka)
źródło
Pisałem swój kod w PHP i miałem trochę problemów z używaniem funkcji concat i union, a także nie korzystałem ze zmiennych SQL, jakikolwiek sposób, w jaki go uruchomiłem, oto mój kod:
źródło
Oto sposób na dynamiczne pobieranie tytułów nagłówków z nazw kolumn.
źródło
Chciałbym dodać do odpowiedzi udzielonej przez Sangama Belose. Oto jego kod:
Jeśli jednak nie ustawiłeś swojego
"secure_file_priv"
w zmiennych, może to nie działać. W tym celu sprawdź folder ustawiony dla tej zmiennej przez:Wynik powinien wyglądać następująco:
Możesz zmienić tę zmienną lub zmienić zapytanie, aby wyprowadzało plik do pokazanej domyślnej ścieżki.
źródło
Sam MySQL nie wystarczy, aby zrobić to po prostu. Poniżej znajduje się skrypt PHP, który wyświetla kolumny i dane w formacie CSV.
Wprowadź nazwę bazy danych i tabele u góry.
Będziesz potrzebował tego katalogu, do którego chcesz wyprowadzać. MySQL musi mieć możliwość zapisu w katalogu.
Możesz edytować opcje eksportu CSV w zapytaniu:
Na końcu jest wywołanie exec do GZipa CSV.
źródło
źródło