开发者社区> 问答> 正文

otter解析binlog失败

引起解析失败的语句如下:

sql_mode='' UPDATE members SET money = money + 103. WHERE id = 1234 AND money >= '103.'

otter报错日志如下 exception:canal:to_big:com.alibaba.otter.canal.parse.exception.CanalParseException: java.lang.NumberFormatException: For input string: "1300." Caused by: java.lang.NumberFormatException: For input string: "1300." at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) at java.lang.Integer.parseInt(Integer.java:580) at java.math.BigInteger.(BigInteger.java:470) at java.math.BigInteger.(BigInteger.java:606) at com.alibaba.fastsql.sql.parser.Lexer.integerValue(Lexer.java:2442) at com.alibaba.fastsql.sql.parser.SQLExprParser.primary(SQLExprParser.java:386) at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlExprParser.primary(MySqlExprParser.java:205) at com.alibaba.fastsql.sql.parser.SQLExprParser.bitXor(SQLExprParser.java:121) at com.alibaba.fastsql.sql.parser.SQLExprParser.multiplicative(SQLExprParser.java:208) at com.alibaba.fastsql.sql.parser.SQLExprParser.additiveRest(SQLExprParser.java:2099) at com.alibaba.fastsql.sql.parser.SQLExprParser.exprRest(SQLExprParser.java:106) at com.alibaba.fastsql.sql.parser.SQLExprParser.expr(SQLExprParser.java:99) at com.alibaba.fastsql.sql.parser.SQLExprParser.parseUpdateSetItem(SQLExprParser.java:1910) at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlSelectParser.parseUpdateStatment(MySqlSelectParser.java:496) at com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlStatementParser.parseUpdateStatement(MySqlStatementParser.java:111) at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:218) at com.alibaba.fastsql.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:93) at com.alibaba.fastsql.sql.SQLUtils.parseStatements(SQLUtils.java:534) at com.alibaba.otter.canal.parse.inbound.mysql.ddl.DruidDdlParser.parse(DruidDdlParser.java:51) at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parseRowsQueryEvent(LogEventConvert.java:379) at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:130) at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.LogEventConvert.parse(LogEventConvert.java:67) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser.parseAndProfilingIfNecessary(AbstractEventParser.java:409) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3$1.sink(AbstractEventParser.java:209) at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:168) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:271) at java.lang.Thread.run(Thread.java:748)

原提问者Github用户tianqizhanhao1234

展开
收起
绿子直子 2023-06-16 15:17:13 42 0
2 条回答
写回答
取消 提交回答
  • 这个错误是因为 Otter 解析 binlog 时遇到了一个数字格式不正确的问题,具体来说是一个字符串 '1300.' 无法转换成整数。

    建议检查一下数据源中 members 表的 money 字段是否定义为整数类型,如果是,则可能是数据源中存在错误数据,例如 money 字段中有一个值是 '1300.' 这样的字符串,导致 Otter 解析失败。如果是这种情况,可以通过修改数据源中的数据来解决问题。

    如果 money 字段不是整数类型,则需要检查 Otter 配置文件中的数据类型是否正确,以及 Otter 是否正确地将该字段解析为了整数类型。

    2023-06-16 15:28:16
    赞同 展开评论 打赏
  • 最新的canal版本已经解决,otter可以升级最新版本

    原回答者Github用户agapple

    2023-06-16 15:25:30
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ECS块存储产品全面解析 立即下载
神龙云服务器产品及技术深度解析 立即下载
弹性创造价值:基于ECS的最佳性价比实践解析 立即下载

相关镜像