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 
相关推荐
倔强的石头_2 小时前
kingbase备份与恢复实战(二)—— sys_dump库级逻辑备份与恢复(Windows详细步骤)
数据库
Elasticsearch1 天前
如何使用 Agent Builder 排查 Kubernetes Pod 重启和 OOMKilled 事件
elasticsearch
jiayou641 天前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
李广坤2 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
Elasticsearch2 天前
通用表达式语言 ( CEL ): CEL 输入如何改进 Elastic Agent 集成中的数据收集
elasticsearch
爱可生开源社区3 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript
加号34 天前
windows系统下mysql多源数据库同步部署
数据库·windows·mysql
シ風箏4 天前
MySQL【部署 04】Docker部署 MySQL8.0.32 版本(网盘镜像及启动命令分享)
数据库·mysql·docker
李慕婉学姐4 天前
Springboot智慧社区系统设计与开发6n99s526(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端