我正在尝试将一个非常大的.csv文件(~4gb)导入到mysql中。我正在考虑使用phpmyadmin,但是你的最大上传大小为2mb。有人告诉我,我必须使用命令行。
我打算使用这些说明导入它:http://dev.mysql.com/doc/refman/5.0/en/mysqlimport.html#c5680
将.csv表中的第一行设置为mysql表中的列名是什么命令?这个选项可以通过phpmyadmin获得,所以它们也必须是一个mysql命令行版本,对吗?请帮我。谢谢。
-Raj
答案 0 :(得分:114)
尝试此命令
load data local infile 'file.csv' into table table
fields terminated by ','
enclosed by '"'
lines terminated by '\n'
(column1, column2, column3,...)
这里的字段是数据需要放置的实际表字段。括号和后缀的行是可选的,如果您的列用双引号括起来可以帮助,例如Excel导出等。
有关详细信息,请查看manual。
要将第一行设置为表列名,只需忽略要读取的行并在命令中添加值。
答案 1 :(得分:10)
你可以做一个
mysqlimport --columns='head -n 1 $yourfile' --ignore-lines=1 dbname $yourfile`
也就是说,如果您的文件以逗号分隔并且不是分号分隔。否则你也可能需要sed
通过它。
答案 2 :(得分:9)
试试这个:
mysql -uusername -ppassword --local-infile scrapping -e "LOAD DATA LOCAL INFILE 'CSVname.csv' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"
答案 3 :(得分:5)
要使用mysqlimport导入带有标题行的csv,只需添加
--ignore-lines=N
(忽略数据文件的前N行)
您已链接的页面中描述了此选项。
答案 4 :(得分:0)
您可以按以下方式添加:
LOAD DATA LOCAL INFILE 'C:/Users/userName/Downloads/tableName.csv'
INTO TABLE tableName
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n';
答案 5 :(得分:0)
另一种选择是使用csvkit库中的csvsql命令。
直接在命令行上使用示例:
csvsql --db mysql:///test --tables yourtable --insert yourfile.csv
这可以直接在命令行上执行,也可以内置在python或shell脚本中以实现自动化(如果您需要对多个文件执行此操作)。
csvsql允许您根据csv的结构动态创建数据库表,因此这是一种精简代码方式,可将csv的第一行自动转换为MySQL表头。
完整的文档和更多示例在这里: https://csvkit.readthedocs.io/en/1.0.3/scripts/csvsql.html
答案 6 :(得分:0)
我知道这是命令行,但是只是一些小技巧,可以尝试一下,如果您有MySQL工作台并且csv不太大,则可以简单地
我说最好的希望是因为这是MySQL Workbench。你永远都不知道它什么时候爆炸
如果要在远程服务器上执行此操作,则可以这样做
mysql -h<server|ip> -u<username> -p --local-infile bark -e "LOAD DATA LOCAL INFILE '<filename.csv>' INTO TABLE <table> FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n'"
请注意,我没有在-p
之后输入密码,因为在命令行中输入密码是不正确的做法
答案 7 :(得分:0)
大多数答案都缺少一个重点,例如,如果您在Windows上创建了从Microsoft Excel导出的csv
文件,并在linux环境中导入了该文件,则会得到意想不到的结果。
正确的语法是
load data local infile 'file.csv' into table table fields terminated by ',' enclosed by '"' lines terminated by '\r\n'
这里的区别是'\r\n'
与简单的'\n