上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

如何用 CloudCanal 做多源数据汇聚

guduadmin443月前

简介

CloudCanal 近期增强了数据汇聚防重能力,消除各个来源 数据表名冲突、主键/唯一键约束冲突 的可能性。

这个增强具体特性包括:

  • 常用虚拟列添加
  • 指定虚拟列为对端表主键
  • 对端表名分级元数据拼接
  • 可视化操作,无需写自定义代码

    本文简要介绍上述特性,并使用 MySQL -> StarRocks 作为示例进行能力演示。

    技术点

    多种虚拟列

    为了应对不同场景,不同数据源,CloudCanal 提供了以下虚拟列生成能力,如下表。

    同时也支持 单表设置多个虚拟列,针对特定表设置,批量设置。

    虚拟列种类说明有效的操作
    指定具体值可指定特定的数字、字符串生成新列,写入到对端INSERT
    数据迁移或同步时间以数据到达 CloudCanal 的时间生成新列,写入对端INSERT
    源端实例ID_SCHEMA_表_主键值按照源端数据源 实例ID,Schema,表 和 主键值 做拼接生成新列,写入对端INSERT,UPDATE,DELETE
    源端实例ID_DB_SCHEMA_表_主键值按照源端数据源 实例ID,Catalog,Schema,表 和 主键值 做拼接生成新列,写入对端INSERT,UPDATE,DELETE
    源端实例DB_SCHEMA_表_主键值按照源端数据源 Catalog,Schema,表 和 主键值 做拼接生成新列,写入对端INSERT,UPDATE,DELETE
    源端实例SCHEMA_表_主键值按照源端数据源 Schema,表 和 主键值 做拼接生成新列,写入对端INSERT,UPDATE,DELETE
    源端实例表_主键值按照源端数据源 表 和 主键值 做拼接生成新列,写入对端INSERT,UPDATE,DELETE

    指定虚拟列为对端主键(唯一键)

    多来源数据汇聚到同一张表,如果存在主键或唯一约束,往往会形成冲突,比较典型的例子如来自各地的 MySQL 数据自带自增主键,汇聚到对端主键即冲突。

    为了解决这个问题,我们利用既有的 设定对端主键能力,将其扩展到虚拟列,通过将类似 源端实例ID_SCHEMA_表_主键值 设置成对端主键达成主键或唯一键约束成立。

    此能力可针对特定表或批量进行设置。

    对端表名拼接

    业务除了汇聚到同一张表的需求,也存在保持源端独立表的需求,这个时候需要解决表名冲突问题。

    CloudCanal 针对不同数据源,提供以下几种表名拼接规则,在结构迁移时重命名,并且数据迁移和同步支持此类元数据映射。

    表名映射规则说明
    按 SCHEMA_TABLE 拼接(元数据镜像)按照源端数据源 Schema,表 拼接作为对端表名
    按 SCHEMA_TABLE 拼接(元数据转小写)按照源端数据源 Schema,表 拼接并转为 小写 作为对端表名
    按 SCHEMA_TABLE 拼接(元数据转大写)按照源端数据源 Schema,表 拼接并转为 大写 作为对端表名
    按 DB_SCHEMA_TABLE 拼接(元数据镜像)按照源端数据源 Catalog,Schema,表 拼接作为对端表名
    按 DB_SCHEMA_TABLE 拼接(元数据转小写)按照源端数据源 Catalog,Schema,表 拼接并转为 小写 作为对端表名
    按 DB_SCHEMA_TABLE 拼接(元数据转大写)按照源端数据源 Catalog,Schema,表 拼接并转为 大写 作为对端表名

    支持的链路

    此次增强,因为测试时间紧张,我们只开了一批链路,如下列表所示,这些链路均支持上述特性

    • MySQL -> MySQL, MySQL -> StarRocks, MySQL -> Doris, MySQL -> SelectDB, MySQL -> ClickHouse, MySQL -> PostgreSQL, MySQL -> ORACLE
    • ORACLE -> StarRocks ,ORACLE -> MySQL
    • PostgreSQL -> MySQL

      操作示例

      环境准备

      • 根据文档安装 CloudCanal Docker 版

      • 添加 MySQL 数据库和 阿里云 EMR for StarRocks

        任务创建

        • 选择数据源信息略,点击下一步

        • 选择任务规格、配置略,点击下一步

        • 选择库表,点击库表映射,选择 按 SCHEMA_TABLE 拼接(元数据镜像),可看到对端表名按规则拼接

        • 点击下一步

          如何用 CloudCanal 做多源数据汇聚,gather_data_3,第1张

        • 选择列页面

        • 批量操作 > 批量设置虚拟列

          如何用 CloudCanal 做多源数据汇聚,gather_data_4,第2张

        • 批量操作 > 批量设置对端主键,此例选择 vir_instid_sche_tab_pk 作为对端主键

        • 点击下一步

          如何用 CloudCanal 做多源数据汇聚,gather_data_5,第3张

        • 确认任务创建

        • 结构迁移,全量迁移,增量同步正常运行

          如何用 CloudCanal 做多源数据汇聚,gather_data_6,第4张

          功能验证

          查看全量迁移数据
          • 使用 CloudDM 查询对端表数据,结构正确(主键),虚拟列数据按规则生成

            如何用 CloudCanal 做多源数据汇聚,gather_data_7,第5张

            如何用 CloudCanal 做多源数据汇聚,gather_data_8,第6张

          • 源端插入和更新数据,对端虚拟列数据按规则插入或更新(pk字段更新,暂未支持)

            如何用 CloudCanal 做多源数据汇聚,gather_data_9,第7张

            如何用 CloudCanal 做多源数据汇聚,gather_data_10,第8张

          • 源端删除数据,对端则删除对应数据

            总结

            本文主要介绍 CloudCanal 数据防重能力,降低数据汇聚场景各个来源数据表名冲突、主键/唯一键约束冲突的概率,从而让用户更加便捷地落地在线数据应用。

网友评论

搜索
最新文章
热门文章
热门标签
 
 梦见刮龙卷风  备孕梦到怀孕了是胎梦吗  梦见杀了大蛇是什么预兆