繁体   English   中英

如何在使用LOAD DATA命令时跳过csv文件的行?

[英]how to skip lines of a csv file while using LOAD DATA command?

我正在使用sql命令加载数据以将csv文件中的数据插入mysql数据库。 问题在于文件的末尾有几行,例如“ 、、、、、、、、、、、、、、、、、、(csv文件是excel文件的转换)。 因此,当sql到达这些行时,他向我发送了#1366-错误的整数值:行661的“ Bug_ID”列。“ bug_id”是一个int,我有32列。

考虑到提交的行数是可变的,我如何告诉他忽略那些行?

谢谢你的帮助。

当读取带分隔符的文本文件时,MySQL支持'LINES STARTING BY“ xxxx”'。 如果可以,要求您的特定.CVS文件的每条数据行都带有“前缀”,而非数据行则不具有该前缀。 这使您可以根据需要将注释放入.CSV中。

MySQL Doc:在文件中加载数据

您可以:

第1步-(可选)导出数据:

SELECT * 
  INTO OUTFILE "myFile.csv"
  COLUMNS TERMINATED BY ','
  OPTIONALLY ENCLOSED BY '"'
  ESCAPED BY '\\'
  LINES STARTING BY 'DATA:'
  TERMINATED BY '\n'
FROM table

第2步-导入数据

LOAD DATA INFILE "myFile.csv"
INTO TABLE some_table
     COLUMNS TERMINATED BY ','
     OPTIONALLY ENCLOSED BY '"'
     ESCAPED BY '\\'
     LINES STARTING BY 'DATA:'

有效地,您可以将.csv文件修改为如下所示:

# Comment for humans
// Comment for humans
Comments for us humans.
DATA:1,3,4,5,6,'asdf','abcd'
DATA:4,5,6,7,8,'qwerty','zxcv'
DATA:9,8,7,6,5,'yuio','hjlk'
# Comments for humans
// Comments for humans
Comments for humans
DATA:13,15,64,78,54,'bla bla','foo bar'

构造仅解释/读取前缀为“ DATA:”的行。

我使用这种技术为需要外部控制信息的SQL脚本创建了一个“配置”文件。 但是,有一个人为因素需要能够轻松操纵.csv文件并理解其内容。

-乔根森(J Jorgenson)-

我修复了它:我刚刚在我的csv解析器中的行上添加了一个条件

while((line = is.readLine())!= null){

  if (!line.equals(",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,"))
      {
  Iterator e = csv.parse(line).iterator();
      ......
      }

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM