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 INFILE
polecenia.
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 INFILE
polecenia.
Odpowiedzi:
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.
for i in range(1,100): print("@column",i,",",end="",sep="")
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 .
(field,names)
znak tuż przed średnikiem na końcu, aby działał.
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.
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
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,...);
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 INFILE
zamiast LOAD DATA INFILE
.
ERROR 1148 (42000): The used command is not allowed with this MySQL version
.