canal同步es,sql注意事项

官网地址:https://github.com/alibaba/canal/wiki/Sync-ES

sql支持多表关联自由组合, 但是有一定的限制:

  1. 主表不能为子查询语句
  2. 只能使用left outer join即最左表一定要是主表
  3. 关联从表如果是子查询不能有多张表
  4. 主sql中不能有where查询条件(从表子查询中可以有where条件但是不推荐, 可能会造成数据同步的不一致, 比如修改了where条件中的字段内容)
  5. 关联条件只允许主外键的'='操作不能出现其他常量判断比如: on a.role_id=b.id and b.statues=1
  6. 关联条件必须要有一个字段出现在主查询语句中比如: on a.role_id=b.id 其中的 a.role_id 或者 b.id 必须出现在主select语句中

Elastic Search的mapping 属性与sql的查询值将一一对应(不支持 select *), 比如: select a.id as _id, a.name, a.email as _email from user, 其中name将映射到es mapping的name field, _email将 映射到mapping的_email field, 这里以别名(如果有别名)作为最终的映射字段. 这里的_id可以填写到配置文件的 _id: _id映射.


分享一下,我遇到的问题:

0:同步前,注意要先全量导入数据,不然会报错找不到元素

命令:

全量:

curl -XPOST http://localhost:9200/索引名.yml

删除索引:

curl -XDELETE http://ip:端口号/索引名称

1.from后的表不能用反引号

错误示范:select id,order from `order`;

正确:select id,order from order;

不会报错,只是不会同步数据

注意:关键字除外:例如 user,order等

2.尽量不在select中写聚合函数

报错:NotSuchElementException

错误示例:

sql 复制代码
         SELECT
         i.user_id AS _id,
         i.id AS id,
         i.user_id AS userId,
         u.image,
         i.isDel,
         IFNULL( w.oc, 0 )  AS oc,
         (select count(oc) from wxx w  where i.user_id = w.user_id) AS oc,
         DATE_FORMAT( i.create_time, '%Y-%m-%d %H:%i:%S' ) AS createTime 
         FROM
         uxx_iyy i
         LEFT JOIN uyy u ON u.user_id = i.user_id 

正确示例:

sql 复制代码
         SELECT
         i.user_id AS _id,
         i.id AS id,
         i.user_id AS userId,
         i.isDel,
         IFNULL( w.oc, 0 )  AS oc,
         DATE_FORMAT( i.create_time, '%Y-%m-%d %H:%i:%S' ) AS createTime 
         FROM
         uxx_iyy i
         LEFT JOIN uxx u ON u.user_id = i.user_id
         LEFT JOIN (
	        SELECT
		        user_id,
		        COUNT( oc ) AS oc 
	        FROM
		      wxxx_cyyy w 
	        GROUP BY
          w.user_id 
          ) w ON w.user_id = i.user_id 
相关推荐
asdfg12589636 分钟前
一文通俗理解JDBC中的核心概念+案例
java·数据库·oracle·jdbc
点灯小铭13 分钟前
基于单片机与DAC0832的双路波形信号发生系统设计
数据库·单片机·mongodb·毕业设计·课程设计·期末大作业
小陈phd18 分钟前
Text2SQL智能体学习笔记(二)——NL2SQL落地的隐形基石:元数据库
数据库·笔记·学习
霸道流氓气质19 分钟前
阿里云 OSS 从零到实战:概念、配置与 Spring Boot 集成指南
数据库·spring boot·阿里云
茉莉玫瑰花茶20 分钟前
综合案例 - AI 智能租房助手 [ 4 ]
数据库·python·ai·langgraph
可乐ea21 分钟前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
ULIi096kr22 分钟前
MySQL查看表创建时间、修改时间、最后更新时间(精准排查僵尸表)
数据库·mysql
折哥的程序人生 · 物流技术专研35 分钟前
Tomcat 严重警告:JDBC 驱动未注销 + 工作线程泄漏 —— 原因、影响与彻底修复(生产级终极指南)
java·运维·数据库·mysql·oracle·tomcat
初圣魔门首席弟子40 分钟前
Qt C++ 项目实战:修改共享头文件后的高效增量编译与快速发布流程
数据库
wb0430720141 分钟前
仓库搬家不停业——从阿明的“在线换仓库“,看数据库迁移与 Schema 演进的实战方法论
数据库·adb·架构