开发者社区> 问答> 正文

load.exception数据截断:第1行“create_time”列的日期时间值“0000-0

这条sql如何跳过

报错日志:

pid:5 nid:2 exception:setl:com.alibaba.otter.node.etl.load.exception.LoadException: java.util.concurrent.ExecutionException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException: com.alibaba.otter.node.etl.load.exception.LoadException: org.springframework.dao.DataIntegrityViolationException: PreparedStatementCallback; SQL [insert into url_project.csessioninfo(salesman_id , union_id , web_open_id , open_id , tt_openid , tt_anonymous_openid , uuid , skey , create_time , last_visit_time , session_key , user_info , nick_name , gender , avatar_url , country , city , province , language , watermark , created_at , updated_at , phone , is_phone_verified , remember_token , points , is_blacklist , blacklist_time , black_record , platform , city_id , create_blacklist_time , is_specialist , is_salesman_unlimited , black_reason , individual_resume , name , wechat_code , wechat_qrcode , sales_man_recommend_index , coins , sales_man_like_num , sales_man_attention_num , sales_man_page_views , sales_man_consulting_num , tag , is_sys_user , is_manual , is_auto , sys_status , phrase_id , wechat_avatar_url , account_type_id , v_flag , followings , followers , scene , id_card , id) values (? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ? , ?) on duplicate key update salesman_id=values(salesman_id) , union_id=values(union_id) , web_open_id=values(web_open_id) , open_id=values(open_id) , tt_openid=values(tt_openid) , tt_anonymous_openid=values(tt_anonymous_openid) , uuid=values(uuid) , skey=values(skey) , create_time=values(create_time) , last_visit_time=values(last_visit_time) , session_key=values(session_key) , user_info=values(user_info) , nick_name=values(nick_name) , gender=values(gender) , avatar_url=values(avatar_url) , country=values(country) , city=values(city) , province=values(province) , language=values(language) , watermark=values(watermark) , created_at=values(created_at) , updated_at=values(updated_at) , phone=values(phone) , is_phone_verified=values(is_phone_verified) , remember_token=values(remember_token) , points=values(points) , is_blacklist=values(is_blacklist) , blacklist_time=values(blacklist_time) , black_record=values(black_record) , platform=values(platform) , city_id=values(city_id) , create_blacklist_time=values(create_blacklist_time) , is_specialist=values(is_specialist) , is_salesman_unlimited=values(is_salesman_unlimited) , black_reason=values(black_reason) , individual_resume=values(individual_resume) , name=values(name) , wechat_code=values(wechat_code) , wechat_qrcode=values(wechat_qrcode) , sales_man_recommend_index=values(sales_man_recommend_index) , coins=values(coins) , sales_man_like_num=values(sales_man_like_num) , sales_man_attention_num=values(sales_man_attention_num) , sales_man_page_views=values(sales_man_page_views) , sales_man_consulting_num=values(sales_man_consulting_num) , tag=values(tag) , is_sys_user=values(is_sys_user) , is_manual=values(is_manual) , is_auto=values(is_auto) , sys_status=values(sys_status) , phrase_id=values(phrase_id) , wechat_avatar_url=values(wechat_avatar_url) , account_type_id=values(account_type_id) , v_flag=values(v_flag) , followings=values(followings) , followers=values(followers) , scene=values(scene) , id_card=values(id_card) , id=values(id)]; Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column 'create_time' at row 1; nested exception is com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column 'create_time' at row 1 at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:101) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72) at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:812) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:868) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$DbLoadWorker$2.doInTransaction(DbLoadAction.java:625) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:130) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$DbLoadWorker.doCall(DbLoadAction.java:617) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$DbLoadWorker.call(DbLoadAction.java:545) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction.doTwoPhase(DbLoadAction.java:462) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction.doLoad(DbLoadAction.java:275) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction.load(DbLoadAction.java:161) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$$FastClassByCGLIB$$d932a4cb.invoke() at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191) at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:618) at com.alibaba.otter.node.etl.load.loader.db.DbLoadAction$$EnhancerByCGLIB$$80fd23c2.load() at com.alibaba.otter.node.etl.load.loader.db.DataBatchLoader$2.call(DataBatchLoader.java:198) at com.alibaba.otter.node.etl.load.loader.db.DataBatchLoader$2.call(DataBatchLoader.java:189) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column 'create_time' at row 1 at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3976) at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3914) at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530) at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683) at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2495) at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1903) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2124) at com.mysql.jdbc.PreparedStatement.executeUpdateInternal(PreparedStatement.java:2058) at com.mysql.jdbc.PreparedStatement.executeLargeUpdate(PreparedStatement.java:5158) at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:2043) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:105) at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:818) at org.springframework.jdbc.core.JdbcTemplate$2.doInPreparedStatement(JdbcTemplate.java:1) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:587) ... 21 more

原提问者Github用户 zj452008181

展开
收起
云上静思 2023-06-14 23:31:31 69 0
4 条回答
写回答
取消 提交回答
  • 发现是两边数据库sql_mode不一致,调整参数后解决

    原回答者Github用户 zj452008181

    2023-06-16 15:19:53
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    这个错误是由于插入的数据中日期时间值不符合数据库的要求,导致数据截断。你可以尝试跳过这条SQL语句,以避免出现这个错误。

    在Otter中,你可以使用filter配置来过滤不需要同步的数据,或者使用transformer配置来转换数据格式,以解决数据截断的问题。具体来说,你可以在同步任务的配置文件中添加以下配置来跳过这条SQL语句:

    { "type": "mysql", "filter": { "after": "WHERE create_time <> '0000-00-00 00:00:00'" }, "input": { ... }, "output": { ... } } 这个配置中使用了after过滤器,它会在同步数据之前过滤掉满足条件的数据。具体来说,它会过滤掉create_time等于'0000-00-00 00:00:00'的数据,从而跳过这条SQL语句。

    注意,在使用过滤器或转换器配置时,你需要确保它们不会影响其他数据的同步,否则可能导致数据不一致的问题。同时,你也需要在跳过SQL语句时,确保不会影响系统的正常运行和数据完整性。

    2023-06-15 16:51:35
    赞同 展开评论 打赏
  • 这个问题是由于数据中的日期时间格式不正确导致的,您可以通过设置处理数据异常的方式来跳过这个错误。具体的做法是,通过 OTTER 控制台中的“路由规则处理器”来设置过滤条件,使得该数据处理异常可以直接跳过,不会引起任务执行中断。

    具体操作步骤如下:

    1. 在 OTTER 控制台中进入“数据源/目标管理”界面,选择需要设置路由规则的数据源对应的 “Pipeline” 页面。

    2. 在“Pipeline”页面的操作栏中,选择“路由规则处理器”,进入路由规则处理器设置页面。

    3. 在路由规则处理器设置页面中,您可以进行条件过滤的设置,选择需要过滤的数据值所在的列,设置过滤条件。例如,在这个问题中,您可以直接跳过 '0000-00-00 00:00:00' 这个日期时间格式,您可以设置该“日期时间”列的过滤条件为 "create_time != '0000-00-00 00:00:00'",即不包含 '0000-00-00 00:00:00' 的数据行都可以被正常处理,而满足此条件的数据行将被跳过。

    4. 更改完过滤条件,保存设置即可。

    通过以上设置,就可以忽略掉这个异常,让任务继续执行。需要注意的是,过滤条件的设置需要结合任务数据的实际情况进行,确保只过滤错误数据,不漏掉正确数据。

    2023-06-15 08:40:51
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    根据报错信息,可以看出是在执行insert语句时出现了异常,具体是由于DataIntegrityViolationException导致的。这个异常通常是由于插入的数据与数据库的约束条件不符合导致的,比如插入的数据长度超过了字段的最大长度,或者插入的数据与唯一约冲突等。

    2023-06-14 23:45:52
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载