mysql多表关联查询同步到es_如何通过Logstash同步多表关联数据至Elasticsearch

如果你对 使用Logstash保持Elasticsearch与数据库同步 方案还不是很熟悉,建议先花点时间精读它。

上面的文章以单表同步场景为例,清楚讲述了如何通过JDBC同步数据至ES,而对于实际开发中经常出现的多表关联同步并未提及,以下是我针对多表关联同步的趟坑过程希望对你有所帮助。

数据库表的约定原则

同步单表时我们对于表字段的约定:

表中要有主键字段(如id),最近变更时间字段(如modification_time),软删除标记字段(如is_deleted),以便jdbc-input数据采集的轮询Job可以识别出增量变动的数据。

提示:jdbc input轮询需要基于modification_time条件查询,所以给该字段加上索引。

多表关联同步方案

多表关联的情况下我们需要JOIN其他表查询得到结果,这个结果就是ES需要的打平后的宽表。ES新的版本中也增加了join操作,但这事不是ES擅长的,我们选择交给更擅长的数据库处理,让ES只存储打平后的单层索引。

如果你理解单表同步而困惑多表关联同步的话,试着将关联查询的复杂SQL想象(定义)为视图,是不是后续操作就跟单表没区别了!

我们来逐个看下多表关联的同步问题 (假设表a多对多关联表b):

单表的id字段绑定到ES document的_id,可以实现ES索引幂等性,不会出现job原因导致索引文档重复。那对于多表关联的情况呢,可以使用各表id的组合作为document的_id。如SELECT:

concat(a.id, '_', b.id) AS docid

(如果你不关注幂等,也可以用_id默认生成策略。)</

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值