记一次logstash同步MySQL到es时tinyint类型字段被转为boolean类型的问题

2023-03-10 10:02:36 浏览数 (2)

一、先看报错

代码语言:txt复制
"reason"=>"failed to parse field [status] of type [integer] in document with id '469716694017769472'. Preview of field's value: 'true'"

"reason"=>"failed to parse field [status] of type [integer] in document with id '469717297049632768'. Preview of field's value: 'false'"
ES索引里面status字段值ES索引里面status字段值

图为用户将字段类型改为 keyword 后的结果,起初ES索引status类型为 integer

二、分析原因

  1. 检查原始数据,是否统一为数值类型
  2. ES索引字段类型映射异常

以上怀疑的两点,均未发现任何异常,目标索引替换成一个新的索引名字后,依然报同样的错误。

于是乎,怀疑logstash同步MySQL的tinyint类型字段本身就存在异常,经过一番排查,终于找到了解决方案。

三、解决方案

代码语言:txt复制
# jdbc 连接串后面添加参数 tinyInt1isBit=false 即可

jdbc_connection_string => "jdbc:mysql://$URL/$DATABASE?tinyInt1isBit=false
加了该参数后status字段值加了该参数后status字段值

此时 status 类型为 long

0 人点赞