专业的编程技术博客社区

网站首页 > 博客文章 正文

datax-web使用querySql将分表数据同步到一个目标表

baijin 2025-07-09 10:55:33 博客文章 3 ℃ 0 评论

一、概述

本文介绍下如何将分表数据同步到一个目标表当中。

二、案例

源库:source_db

源表:8张分表:student_0......student_7

注意:分表id需保证全局唯一:即student_0表中的主键id,不可和student_1...7分表主键id重复

本案例中,每张分表只有1条数据,主键id分别为:1、2、3、4、5、6、7、8

create table student_{0...7}
(
    id          bigint auto_increment primary key,
    stu_code    varchar(32)             null,
    stu_name    varchar(100)           null,
    create_user varchar(32)            null,
    create_time datetime               null,
    update_user varchar(32)            null,
    update_time datetime               null,
    delete_flag tinyint                null
);

目标库:target_db

目标表:student

项目管理和数据源管理,我们在上一章节中已经新建完毕,这里我们不是通过任务构建模块来获取datax-json文件,而是参照上一节案例,自己编写datax-json文件,具体如下:

{
  "job": {
    "setting": {
      "speed": {
        "channel": 3,
        "byte": 1048576
      },
      "errorLimit": {
        "record": 0,
        "percentage": 0.02
      }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "yRjwDFuoPKlqya9h9H2Amg==",
            "password": "4NKHycqSpV7alObg+7qq33IvNYz9jQhaZFxAJUTGJ4c=",
            "splitPk": "",
            "connection": [
              {
                "querySql": [
                  "SELECT * FROM student_0 UNION ALL  SELECT * FROM student_1 UNION ALL  SELECT * FROM student_2 UNION ALL  SELECT * FROM student_3 UNION ALL  SELECT * FROM student_4 UNION ALL  SELECT * FROM student_5 UNION ALL  SELECT * FROM student_6 UNION ALL  SELECT * FROM student_7;"
                ],
                "jdbcUrl": [
                  "jdbc:mysql://localhost:3306/source_db"
                ]
              }
            ]
          }
        },
        "writer": {
          "name": "mysqlwriter",
          "parameter": {
            "writeMode": "replace",
            "username": "yRjwDFuoPKlqya9h9H2Amg==",
            "password": "4NKHycqSpV7alObg+7qq33IvNYz9jQhaZFxAJUTGJ4c=",
            "column": [
              "*"
            ],
            "connection": [
              {
                "table": [
                  "student"
                ],
                "jdbcUrl": "jdbc:mysql://localhost:3306/target_db"
              }
            ]
          }
        }
      }
    ]
  }
}

querySql:

使用querySql来自定义筛选SQL,更加灵活,可满足复杂多变的业务。

当配置querySql时,xxxReader直接忽略table、column、where条件的配置

writeMode:

replace:有则更新,无则插入

column:

* 号代表全部列

执行任务:

三、总结

将分表同步到一个目标表,需保证主键ID全局唯一,我们可以借助雪花算法等等来生成主键ID。几个案例介绍下来,可以发现datax在数据同步这一块确实可以节省许多人力成本,同步性能也比较高,后面章节我们再接着介绍下datax数据同步流程。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表