简述
上一篇文章介绍了应用 CloudCanal 进行 MySQL 到 ElasticSearch 的宽表构建, 有蛮多敌人关注和尝试应用,咱们也在一直迭代降级这个能力。
作为产品的通用性能,明天咱们介绍下 MySQL -> ClickHouse 的宽表构建案例。
技术点
ClickHouse 表关联之觞
ClickHouse 作为规范的列存数据库,其特点相当显明,对于多维度数据聚合、筛选特地高效,对于列存面向计算的特点,用得相当不错,包含但不限于以下特点
io 效率高
- 列压缩
- 多数列数据存取io放大效应较小
极致计算优化
- 向量化
- 利用 SSE 等 SIMD 指令集减速
- 将来可选 AVX 512 等指令集优化
- 将来对于计算卸载到 FPGA、GPU 较便当
然而 ClickHouse 对于数据关联(join), 相比于其 多维聚合、筛选 能力要弱一些。对于这个问题,咱们感觉有必要通过 CloudCanal 的宽表能力,让其适用性失去进一步晋升。大宽表 + 突出的数据 多维聚合、筛选 能力,简直等于交互式剖析的杀手锏。
操作示例
前置条件:
- CloudCanal 社区版部署,参见 社区版装置文档
- 筹备好 MySQL 数据库(本例应用 5.7 版本)和 ClickHouse 数据库(本例应用 21.8.X 版本)
MySQL 上创立 1 张事实表(my_order)和 2 张维表 (user 、product)
CREATE TABLE `my_order` ( `id` bigint(19) NOT NULL AUTO_INCREMENT, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, `product_id` bigint(20) NOT NULL, `user_id` bigint(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1460 DEFAULT CHARSET=utf8;CREATE TABLE `product` ( `id` bigint(19) NOT NULL AUTO_INCREMENT, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, `name` varchar(255) NOT NULL, `price` decimal(20,2) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2719 DEFAULT CHARSET=utf8;CREATE TABLE `user` ( `id` bigint(19) NOT NULL AUTO_INCREMENT, `gmt_create` datetime NOT NULL, `gmt_modified` datetime NOT NULL, `name` varchar(255) NOT NULL, `level` varchar(255) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=2224 DEFAULT CHARSET=utf8
ClickHouse 上创立 1 张宽表 my_order , 并额定蕴含两张维表相干数据
- user_id (关联user.id), user_name(对应user.name)
- product_id(关联product.id) ,product_name(对应product.name),product_price (对应product.price)
CREATE TABLE trade.my_order( `id` Int64, `gmt_create` DateTime, `gmt_modified` DateTime, `product_id` Int64, `user_id` Int64, `user_name` Nullable(String), `product_name` Nullable(String), `product_price` Nullable(Decimal(20, 2)) )ENGINE = ReplacingMergeTreeORDER BY idSETTINGS index_granularity = 8192
开发宽表代码
- 代码工程 cloudcanal-data-process ,并找到代码类 MySqlToChOnlyFact_one_fact_two_dim.java
- 批改必要信息
打包
进入工程目录,应用命令进行打包
% pwd/Users/zylicfc/source/product/cloudcanal/cloudcanal-data-process% mvn -Dtest -DfailIfNoTests=false -Dmaven.javadoc.skip=true -Dmaven.compile.fork=true clean package
自定义代码包
- 打包命令后,代码包位于工程目录下的 wide-table/target 目录
增加数据源
- 登录 CloudCanal 平台
- 数据源治理->新增数据源
- 将MySQL 和 ClickHouse 别离增加
工作创立
- 工作治理->工作创立
- 抉择 源 和 指标 数据源
- 抉择 数据同步,并勾选 全量数据初始化, 其余选项默认
- 抉择须要迁徙同步的表, 此处只有抉择事实表即可,维表会通过自定义代码反查补充
- 抉择列,默认全选,%(#ea1f1f)[抉择上传代码包(门路如上所示)]
- 确认创立,并主动运行
校验数据
- 变更事实表数据
- 变更维表数据
数据变化规律
- 事实表插入,更新都会反查维表最新数据并写入对端
- 维表更新,须要触发事实表更新能力带上最新的维表变更数据写入对端
- 维表数据删除,如果触发事实表更新,默认将会把对应的维表数据(已删除)置为null
常见问题
维表变动后怎么办?
维表变动不会间接触发事实表更新。须要源端触发事实表更新(比方变更一个工夫字段),带上最新的维表数据进行对端数据刷新。
另外对于维表数据的删除,如果触发事实表更新从而刷新对端数据,则默认置为null。
不会开发 java 代码怎么办?
如果能打包不会 java 开发,在 cloudcanal-data-process 寻找相应模版,批改配置即可。
如果不能打包也不会开发,找 CloudCanal 同学帮助。
如果遇到出错或者问题怎么办?
如果会 java 开发,倡议关上工作的 printCustomCodeDebugLog 察看输入的数据是否合乎预期,如果不合乎预期,能够关上工作的 debugMode 参数,对数据转换逻辑进行调试。
如果不会 java 开发, 找 CloudCanal 同学帮助。
还反对其余数据源么?
这个是 CloudCanal 通用能力,只有源和指标之间实现了全量迁徙和增量同步,即反对。
总结
本文简略介绍了如何应用 CloudCanal 进行 MySQL -> ClickHouse 的宽表构建,以最常见的单事实表多维表形式举例。各位读者敌人,如果你感觉还不错,请点赞、评论加转发吧。
更多精彩
- 5分钟搞定 MySQL 到 ElasticSearch 宽表构建和同步-CloudCanal实战
- 异地多活根底之数据双向同步进阶篇-CloudCanal实战
- 5分钟搞定 MySQL 到 ClickHouse 实时数据同步进阶篇-CloudCanal实战
- 支流关系型数据库到 Kudu 实时数据同步-CloudCanal实战
- 5分钟搞定 MySQL 到 ElasticSearch 迁徙同步-CloudCanal 实战
- 5分钟搞定 MySQL 到 MySQL 异构在线数据迁徙同步-CloudCanal 实战
- MySQL 到 ElasticSearch 实时同步构建数据检索服务的选型与思考
- 构建基于Kafka直达的混合云在线数据生态-cloudcanal实战
- 5分钟搞定 MySQL 到 TiDB 的数据同步 - CloudCanal实战
退出社区
咱们创立了 CloudCanal 微信交换群,在外面,您能够失去最新版本公布信息和资源链接,您能看到其余用户一手评测、应用状况,您更能失去激情的问题解答,当然您还能够给咱们提需要和问题。扫描下方二维码,增加咱们小助手微信拉您进群,备注: 加 CloudCanal 群
退出CloudCanal粉丝群把握一手音讯和获取更多福利,请增加咱们小助手微信:suhuayue001
CloudCanal-收费好用的企业级数据同步工具,欢送品鉴。
理解更多产品能够查看官方网站: http://www.clougence.com
CloudCanal社区:https://www.askcug.com/