现象

同步数据出现异常

Caused by: java.lang.IllegalArgumentException: cannot write xcontent for unknown value of type class java.sql.Timestamp
	at org.elasticsearch.common.xcontent.XContentBuilder.unknownValue(XContentBuilder.java:833) ~[na:na]
	at org.elasticsearch.common.xcontent.XContentBuilder.map(XContentBuilder.java:888) ~[na:na]
	at org.elasticsearch.common.xcontent.XContentBuilder.map(XContentBuilder.java:870) ~[na:na]
	at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:376) ~[na:na]
	at org.elasticsearch.action.index.IndexRequest.source(IndexRequest.java:365) ~[na:na]
	at org.elasticsearch.action.update.UpdateRequest.doc(UpdateRequest.java:643) ~[na:na]
	at com.alibaba.otter.canal.client.adapter.es7x.support.ESConnection$ES7xUpdateRequest.setDoc(ESConnection.java:222) ~[na:na]

原因分析及解决方案

情况一

es中字段类型为text,而mysql类型为date类型, es客户端不支持对java.sql.Timestamp类型转换为字符串。

  • 方案1:修改配置中的sql,调整Timestamp类型的输出格式。
 sql: "select id,date_format(createtime,'%Y-%m-%d %H:%I:%S') createtime  from test_user"
  • 方案2:修改es中字段类型为date

情况二

adapter向es中创建字段时,mysql为timestamp类型,则无法创建该字段。

  • 方案1

手动在es中创建该字段

  • 方案2

sql中timestemp字段转为字符串类型

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐