Jak wstawić wybrane kolumny z pliku CSV do bazy danych MySQL za pomocą polecenia LOAD DATA INFILE

83

Mam plik CSV zawierający 10 kolumn. Chcę wybrać tylko niektóre kolumny z tego pliku i załadować je do bazy danych MySQL za pomocą LOAD DATA INFILEpolecenia.

Ugesh Gali
źródło

Odpowiedzi:

118

Załaduj dane do tabeli w MySQL i określ kolumny:

LOAD DATA LOCAL INFILE 'file.csv' INTO TABLE t1 
FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'  
(@col1,@col2,@col3,@col4) set name=@col4,id=@col2 ;

@ col1,2,3,4 to zmienne do przechowywania kolumn pliku csv (załóżmy 4) nazwa, id to kolumny tabeli.

Arka
źródło
2
Prowadzę swoją odpowiedź w mysql i pojawiają się błąd: ERROR 1148 (42000): The used command is not allowed with this MySQL version.
shgnInc
@shgnInc odsyła ten stackoverflow.com/questions/16285864/…
ArK
8
Co jeśli mam 100 kolumn i chcę tylko zaimportować 2 kolumny, powinienem napisać (@ col1, @ col2, ... @ col100) set name = @ col4, id- @ col2; czy jest łatwy sposób?
Dharma
@Dharma Program w języku Python 3 do drukowania 100 nazw kolumnfor i in range(1,100): print("@column",i,",",end="",sep="")
Agnel Vishal
39
LOAD DATA INFILE 'file.csv'
  INTO TABLE t1
  (column1, @dummy, column2, @dummy, column3, ...)
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '"'
LINES TERMINATED BY '\r\n';

Po prostu zastąp kolumnę 1, kolumna 2 itd. Nazwami kolumn i umieść @dummy w miejscu, w którym w pliku CSV jest kolumna, którą chcesz zignorować.

Pełne szczegóły tutaj .

Marc B.
źródło
5
Kiedy uruchamiam coś takiego, pojawia się błąd składni. Muszę wstawić (field,names)znak tuż przed średnikiem na końcu, aby działał.
Stephen Ostermiller
1
To się nie skaluje, chyba że znasz wszystkie nadchodzące kolumny CSV.
Charles Harmon,
4
jak F to +38 głosów? To zła składnia SQL.
John
34

Określ nazwy kolumn w pliku CSV w instrukcji ładowania danych infile.

Kod wygląda tak:

LOAD DATA INFILE '/path/filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
(column_name3, column_name5);

Tutaj idziesz dodając dane tylko do dwóch kolumn (możesz je wybrać z nazwą kolumny) do tabeli.

Jedyną rzeczą, na którą musisz zwrócić uwagę, jest to, że masz plik CSV (nazwa_pliku.csv) z dwiema wartościami w wierszu (wierszu). W przeciwnym razie proszę wspomnieć. Mam inne rozwiązanie.

Dziękuję Ci.

Ataboy Josef
źródło
2
prawdopodobnie inne odpowiedzi są nieco nieaktualne. ten pracował dla mnie z MySQL 5.6
Fabio Napodano
Dziękuję za podanie pełnej ścieżki do pliku. Przez chwilę szukałem katalogu MySQL, w którym mam umieścić plik csv!
Shrinath
1
Ten działa najlepiej, chociaż ścieżka musi prowadzić z dozwolonych bezpiecznych obszarów. Uruchom to polecenie POKAŻ ZMIENNE JAK "secure_file_priv"; a następnie upuść plik csv w tej lokalizacji
Ganesh Krishnan,
1
Zgadzam się z @FabioNapodano. W mojej wersji 5.7 musiałem umieścić nazwy kolumn na końcu instrukcji.
Anne Gunn
To niestety nie odpowiada na pytanie. Wymaga to dwóch kolumn w pliku .csv i wstawia je do dwóch określonych kolumn w bazie danych. Plakat prosi o wyciągnięcie 2 kolumn z csv o wartości 10
daprezjer
13

Przykład:

zawartość pliku ae.csv:

"Date, xpto 14"
"code","number","year","C"
"blab","15885","2016","Y"
"aeea","15883","1982","E"
"xpto","15884","1986","B"
"jrgg","15885","1400","A"

CREATE TABLE Tabletmp (  
    rec VARCHAR(9) 
);

Dla wstawić tylko kolumnę 3:

LOAD DATA INFILE '/local/ae.csv' 
INTO TABLE Tabletmp
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 2 LINES
(@col1, @col2, @col3, @col4, @col5)
set rec = @col3;


select * from Tabletmp;
    2016
    1982
    1986
    1400
Roberto Góes
źródło
1
Przykłady są zawsze lepsze
Pierre de LESPINAY
3

jeśli masz więcej kolumn w swojej tabeli bazy danych niż liczba kolumn w swoim csv, możesz postępować w ten sposób:

LOAD DATA LOCAL INFILE 'pathOfFile.csv'
INTO TABLE youTable 
CHARACTER SET latin1 FIELDS TERMINATED BY ';' #you can use ',' if you have comma separated
OPTIONALLY ENCLOSED BY '"' 
ESCAPED BY '\\' 
LINES TERMINATED BY '\r\n'
(yourcolumn,yourcolumn2,yourcolumn3,yourcolumn4,...);
Abderrahmane BECHIKH
źródło
0

Dla tych, którzy mają następujący błąd:

Kod błędu: 1290. Serwer MySQL działa z opcją --secure-file-priv, więc nie może wykonać tej instrukcji

Możesz po prostu uruchomić to polecenie, aby zobaczyć, z którego folderu można ładować pliki:

SHOW VARIABLES LIKE "secure_file_priv";

Następnie musisz skopiować pliki w tym folderze i uruchomić zapytanie z LOAD DATA LOCAL INFILEzamiast LOAD DATA INFILE.

Nicolas Bouvrette
źródło