2011-07-07 130 views
37

我試圖導入一個非常大的.csv文件(〜4GB)到MySQL。我正在考慮使用phpmyadmin,但是最大上傳大小爲2mb。有人告訴我,我必須使用命令行。導入CSV到MySQL通過命令行

我打算用這些方向將其導入:http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680

什麼是設置在第一排在.csv表作爲mysql表中的列名的命令?此選項可通過phpmyadmin,所以他們必須是mysql命令行版本太多,對不對?請幫幫我。謝謝。

-Raj

回答

84

這裏試試這個命令

load data local infile 'file.csv' into table table 
fields terminated by ',' 
enclosed by '"' 
lines terminated by '\n' 
(column1, column2, column3,...) 

的字段是數據需要坐在實際表中的字段。通過封閉和終止線是可選的,如果你能幫助有封閉用雙引號,如Excel出口柱等

詳情檢查manual

用於設置第一排爲表的列名,不理會被讀取該行,並在命令中添加值。

+0

幾個問題,首先,做列1,列2等,需要有周圍的引號?而我的問題是他們大約需要導入50多個列名。第一行包含所有的數據,所以如果有一些方法來讀取mysql的第一行,並將其設置爲列名,這將是最好的。每個名字一個接一個地寫就太乏味了。謝謝。 – de1337ed

+0

你不需要寫出來,看到列名用逗號分隔,所以只是從您的CSV文件截取的第一行,並將其粘貼命令,而且據我所知,在phpMyAdmin,CSV文件是首先被讀生成這樣的查詢,然後導入完成。 – Balanivash

+0

嗯,沒有想到這一點。讓我一起去。謝謝。你有沒有機會知道如何從文本編輯器中複製並粘貼到ubuntu終端? – de1337ed

4

對於使用mysqlimport的標題行導入CSV,只需添加

--ignore-lines=N 

(忽略數據文件的第N行)

此選項是在你的鏈接頁面描述。

+0

我不想忽略第一行。我想用第一行作爲列標題。 – de1337ed

+0

你不能用mysqlimport來做到這一點,但你可以添加選項--columns = column_list來爲你的表提供你的csv字段的順序。 – Bjoern

9

你可以做一個

mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile` 

也就是說,如果你的文件是逗號分隔的,而不是分號分隔。否則您也可能需要sed

+0

表必須已經創建的標題? '$ yourfile'格式是什麼,* .csv會起作用嗎? – HattrickNZ

+2

您的導入文件需要標題,'head -n 1 $ yourfile'返回CSV文件的第一個以逗號分隔的行。 --ignore-lines = 1然後忽略那一行,因爲它會嘗試將這些插入到你的表中。默認的分隔符是tab(\ t),所以還要添加一個'--fields-terminated-by =',''子句來代替使用逗號分隔符。 請閱讀http://linux.die.net/man/1/mysqlimport和http://dev.mysql.com/doc/refman/5.7/en/load-data.html –

+0

不應該是這樣: 'mysqlimport --columns = $(head -n 1 FILE)--ignore-lines = 1 dbname FILE 其中file是數據庫文件?讓--columns ='head -n 1 $ yourfile'產生語法錯誤。 此外,您可能必須添加選項 - local,因爲許多mysql服務器默認由--secure-file-priv選項配置。 –

5

試試這個:

mysql -uusername -ppassword --local-infile scrapping -e "LOAD DATA LOCAL INFILE 'CSVname.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"