canal异常:cannot write xcontent for unknown value of type class java.sql.Timestamp

现象

同步数据出现异常

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字段转为字符串类型

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lizz666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值