将文件更新到mysql时出错

时间:2018-06-04 11:15:15

标签: mysql csv hive

我正在尝试将csv数据文件加载到mysql中,稍后我需要传递给HDFS但是在更新文件时

mysql > load data infile '/var/lib/mysql-files/online_retail.csv' into table retail fields terminated by ',' ignore 1 lines;       
  

错误:"日期值不正确:' 12/1/2010 8:26'对于专栏   ' invoicedate'在第1行"

mysql> DESCRIBE  retail;

 +-------------+--------------+------+-----+---------+-------+ 
| Field       | Type         | Null | Key | Default | Extra | 
+-------------+--------------+------+-----+---------+-------+ 
| InvoiceNo   | int(11)      | YES  |     | NULL    |       | 
| stockcode   | varchar(20)  | YES  |     | NULL    |       | 
| Description | varchar(500) | YES  |     | NULL    |       | 
| Quantity    | int(11)      | YES  |     | NULL    |       | 
| invoicedate | date         | YES  |     | NULL    |       | 
| UnitPrice   | double       | YES  |     | NULL    |       | 
| CustomerId  | int(11)      | YES  |     | NULL    |       | 
| Country     | varchar(30)  | YES  |     | NULL    |       | 
+-------------+--------------+------+-----+---------+-------+

2 个答案:

答案 0 :(得分:0)

正如所说的eggyal和Date and Time Literals所述:

  

MySQL以这些格式识别DATE值:

     
      
  • 作为'YYYY-MM-DD''YY-MM-DD'格式的字符串。允许使用“宽松”语法:任何标点符号都可以用作日期部分之间的分隔符。例如,'2012-12-31''2012/12/31''2012^12^31''2012@12@31'是等效的。

  •   
  • 作为没有'YYYYMMDD''YYMMDD'格式的分隔符的字符串,前提是该字符串作为日期有意义。例如,'20070523''070523'被解释为'2007-05-23',但'071332'是非法的(它具有无意义的月和日部分)并变为'0000-00-00'

  •   
  • 作为YYYYMMDDYYMMDD格式的数字,前提是该数字作为日期有意义。例如,19830905830905被解释为'1983-09-05'

  •   

就你的具体情况而言,下面几行:

  

MySQL以这些格式识别DATETIME和TIMESTAMP值:

     
      
  • 作为'YYYY-MM-DD HH:MM:SS''YY-MM-DD HH:MM:SS'格式的字符串。这里也允许使用“宽松”语法:任何标点符号   字符可以用作日期部分或时间之间的分隔符   部分。例如,'2012-12-31 11:30:45''2012^12^31 11+30+45',   '2012/12/31 11*30*45''2012@12@31 11^30^45'相同。

  •   
  • 在日期和时间部分与小数秒部分之间识别的唯一分隔符是小数点。

  •   
  • 日期和时间部分可以用T而不是空格分隔。例如,'2012-12-31 11:30:45' '2012-12-31T11:30:45'是   等效。

  •   
  • 作为没有'YYYYMMDDHHMMSS''YYMMDDHHMMSS'格式的分隔符的字符串,前提是该字符串作为日期有意义。   例如,'20070523091528''070523091528'被解释为   '2007-05-23 09:15:28',但'071122129015'是非法的(它有一个   无意义的分钟部分)并成为'0000-00-00 00:00:00'

  •   
  • 作为YYYYMMDDHHMMSSYYMMDDHHMMSS格式的数字,前提是该数字作为日期有意义。例如,   19830905132800830905132800被解释为'1983-09-05 13:28:00'

  •   

因此,您的表达式不是有效的MySQL,既不是日期也不是时间戳文字。为了符合上面详述的文字格式之一,您必须创建一个脚本,使您的时间数据符合DATETIME或TIMESTAMP格式,并可能更新您的数据库以更改invoicedate类型。

答案 1 :(得分:0)

如果您将数据类型指定为" DATE",日期格式应为" YYYY-MM-DD"或" YY-MM-DD"。 将数据类型设置为STRING,或将数据转换为YYYY-MM-DD格式......

从2010年1月12日8:26到2010/12/01 希望这有帮助