代码之家  ›  专栏  ›  技术社区  ›  Vladimir

由于时间戳,从s3命令加载数据失败

  •  0
  • Vladimir  · 技术社区  · 8 年前

    我正在运行 "LOAD DATA FROM S3" 命令将csv文件从s3加载到aurora mysql。如果在MySQL工作台上运行它,命令运行得很好(它给我下面的异常作为警告,但仍然插入日期很好),但是当我在Java中运行时,我得到以下异常:

        com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: 
    Data truncation: Incorrect datetime value: '2018-05-16T00:31:14-07:00'
    

    有解决办法吗?我是否需要在MySQL方面或在我的应用程序中设置一些东西来实现无缝转换?我应该在时间戳上运行replace()命令吗?


    更新1:

    当我使用replace从原始时间戳(2018-05-16t00:31:14-07:00)中删除“-07:00”时,它会适当地加载数据。这是我的负载声明:

    LOAD DATA FROM S3 's3://bucket/object.csv'  
    REPLACE  
    INTO TABLE sample  
    FIELDS TERMINATED BY '\t'  
    LINES TERMINATED BY '\n'  
    IGNORE 1 LINES 
    (@myDate) 
    SET `created-date` = replace(@myDate, '-07:00', ' ');
    

    显然,这不是一个好的解决方案。为什么负载语句在MySQL工作台中工作,而不是在Java代码中工作?我可以设置一些参数使它工作吗?感谢您的帮助!!

    1 回复  |  直到 8 年前
        1
  •  0
  •   Vladimir    8 年前

    我的解决方法是在加载数据查询的“set”部分使用mysql的substring函数(而不是“replace”):

    SUBSTRING(@myDate, 1, 10)
    

    这样就删除了尾随的“-07:00”(实际上我也选择了删除时间,因为我不需要它,但您也可以将其用于时间戳。

    推荐文章