从大型CSV文件

时间:2016-12-12 10:31:00

标签: mysql

我有一个大的CSV文件,我无法在excel中完全打开。

我有一个脚本可以将这些数据导入MySQL,该脚本会转换一些日期列并导入其他所有内容:

LOAD DATA LOCAL INFILE 'A:\\My Files\\Desktop\\SPX\\Book2.csv'
INTO TABLE spx_options_data2 
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(@date, symbol, under, @expiration, strike, put_call, bid, ask, price, volume, open_interest, implied_vol, delta, gamma, rho, theta, vega, nonstd)
SET date = STR_TO_DATE(@date, '%d/%m/%Y'), 
expiration = STR_TO_DATE(@expiration, '%d/%m/%Y'), 
implied_vol = IF(implied_vol = "",NULL,implied_vol);

当我尝试导入整个文件时,大多数行都被跳过,导入的小数据的日期字段为0000-00-00。 MySQL提供的错误响应片段是:

  

580行受影响,64警告:............ 1411日期时间不正确   价值:' 2014-01-02' for function str_to_date 1048 Column' date'不能   是null ......... 1411日期时间值不正确:' 2014-01-18'功能   STR_TO_DATE .........。记录:1333176已删除:0 已跳过:1332596   警告:7354726

但是如果我:

  1. 在excel中打开csv文件
  2. 将所有可以打开的数据复制到另一个csv文件
  3. 尝试并导入该文件
  4. 我获得了更好的成功:

      

    1035456行受影响,64警告:.......... 1292截断错误   DECIMAL值:'' ............... 1062重复录入   ' 2014年1月2日,SPX-1450-C-2014年1月18日'关键' PRIMARY' ...............。 1366   十进制值不正确:''对于列' implied_vol'在第2262行......   记录:1048575已删除:0 跳过:13119 警告:52540

    问题

    1. 将大型CSV文件导入MySQL的最佳方法是什么?
    2. 为什么我得到上面的不同结果(在第二种情况下导入了1035456行,在第一种情况下只导入了580),即使数据来自相同的源和格式?
    3. 为什么要跳过这么多行?
    4. 谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

感谢ADyson:

  

Q1。将大型CSV文件导入MySQL的最佳方法是什么?

在Notepad ++中查看文件以确保格式符合预期,特别是日期。

  

Q2。为什么我得到上面的不同结果(在第二种情况下导入1035456行,在第一种情况下只导入580),即使数据来自相同的源和格式?

不知道,不重要,固定。

  

Q3。为什么要跳过这么多行?

主要关键问题是阻止导入数据。再一次,在Notepad ++中查看并注意到一些问题解决了这个问题。