DATAX 使用总结含示例,全部是干货

工作中使用datax同步数据比较多,直接上示例

  1. 同步mysql 到 doris

python datax.py xxx.json

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "connection": [
              {
                "querySql": [
             "SELECT xx,xx,xx from xx  where xx"
                ],
                "jdbcUrl": [
                  "jdbc:mysql://host:port/db"
                ]
              }
            ],
            "password": "pwd",
            "username": "user",
            "where": ""
          }
        },
        "writer": {
          "name": "doriswriter",
          "parameter": {
            "column": [
              "xx",
              "xx",
              "xx",
              "xx",
              "xx",
              "xx",
              "xx"
            ],
            "loadUrl":[
              "host:httport"
            ],
            "loadProps":{
              "format":"json",
              "strip_outer_array":"true"
            },
            "username":"doris_user",
            "password":"doris_pwd",
            "postSql":[
            ],
            "preSql":[
            ],
            "connection":[
              {
                "jdbcUrl":"jdbc:mysql://doris_host:doris_mysql_port/db",
                "table":[
                  "table"
                ],
                "selectedDatabase":"db"
              }
            ],
            "maxBatchRows":10000000,
            "batchSize":536870912000,
            "writeMode": "truncate"
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": "1"
      }
    }
  }
}

同步mongo 到 doris

python datax.py xxx.json   

查询条件使用: "query": "{ \"col\": 'xx' }",

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mongodbreader",
                    "parameter": {
                        "address": ["mongodb1:mongo_port","mongodb2:mongo_port"],
                        "userName": "user",
                        "userPassword": "pwd",
                        "dbName": "db",
                        "authDb": "admin",
                        "collectionName": "table",
                        "query": "{ \"col\": 'value' }",
                        "column": [
                            {
                                "name": "xx",
                                "type": "xx"
                            },
                            {
                                "name": "xx",
                                "type": "xx"
                            },
                            {
                                "name": "xx",
                                "type": "xx"
                            }
                        ]
                    }
                },
                "writer": {
                    "name": "doriswriter",
                    "parameter": {
                        "column": [
                            "xx",
                            "xx",
                            "xx"
                        ],
                        "loadUrl":[
                            "doris_host:doris_http_port"
                        ],
                        "loadProps":{
                            "format":"json",
                            "strip_outer_array":"true"
                        },
                        "username":"doris_user",
                        "password":"doris_pwd",
                        "postSql":[
                        ],
                        "preSql":[

                        ],
                        "connection":[
                            {
                                "jdbcUrl":"jdbc:mysql://doris_host:doris_mysql_port/db",
                                "table":[
                                    "table"
                                ],
                                "selectedDatabase":"db"
                            }
                        ],
                        "maxBatchRows":100000,
                        "batchSize":536870912
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

datax动态传参

python datax.py test.json -p "-Dyesterday='date -d "0 days ago" +"%Y%m%d"'"

#mongo 同步到doris中使用json
"query": "{ \"day\": '${yesterday}' }"

datax 同步数据mongo时间格式数据与同步后时区存在相差比较

datax 启动的时候调用  -Duser.timezone=xx时区

或者直接修改datax配置的

/datax/conf/core.json

修改时区:"timeZone": "GMT",

在Java Web项目中集成DataX进行数据同步,通常需要将DataX作为数据同步引擎进行调用,并通过Java代码实现任务的创建、执行和管理。DataX本身是基于Java开发的,因此可以非常方便地集成到Java Web项目中。 ### 1. 集成方式概述 DataX提供了一个核心的执行引擎,可以通过命令行调用,也可以通过Java API进行调用。在Web项目中,通常采用调用DataX的Java API方式,将同步任务封装为可调用的对象,便于与Web应用集成。 ### 2. 开发示例 以下是一个在Java Web项目中集成DataX的简化实现示例: #### 2.1 引入DataX依赖 首先需要将DataX的核心模块引入到项目中,可以通过Maven依赖或直接引入JAR包的方式。 ```xml <!-- Maven 依赖示例 --> <dependency> <groupId>com.alibaba.datax</groupId> <artifactId>datax-core</artifactId> <version>3.0.0</version> </dependency> ``` #### 2.2 创建DataX执行类 通过调用DataX的API来执行数据同步任务: ```java import com.alibaba.datax.core.Engine; import com.alibaba.datax.core.util.ConfigParser; import com.alibaba.datax.core.util.Configuration; import com.alibaba.datax.core.util.FrameWorkErrorCode; import com.alibaba.datax.core.util.container.JarLoader; import com.alibaba.datax.core.util.container.PluginLoader; import com.alibaba.datax.core.util.container.ClasspathLoader; public class DataxExecutor { public static void executeDataxJob(String jsonConfigPath) { try { // 初始化DataX配置 Configuration configuration = ConfigParser.parse(jsonConfigPath); // 执行DataX任务 Engine engine = new Engine(); engine.start(configuration); } catch (Exception e) { e.printStackTrace(); throw new RuntimeException("DataX任务执行失败", e); } } } ``` #### 2.3 创建任务配置文件 在`resources`目录下创建一个JSON格式的配置文件,用于定义数据同步任务: ```json { "job": { "content": [ { "reader": { "name": "mysqlreader", "parameter": { "connection": [ { "jdbcUrl": "jdbc:mysql://localhost:3306/source_db", "table": ["source_table"] } ], "password": "password", "username": "root" } }, "writer": { "name": "mysqlwriter", "parameter": { "connection": [ { "jdbcUrl": "jdbc:mysql://localhost:3306/target_db", "table": "target_table" } ], "password": "password", "username": "root", "column": ["id", "name", "age"] } } } ], "setting": { "speed": { "channel": "1" } } } } ``` #### 2.4 在Web接口中调用 在Spring Boot项目中,可以通过Controller调用DataX任务: ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class DataxController { @GetMapping("/sync") public String syncData(@RequestParam String configPath) { DataxExecutor.executeDataxJob(configPath); return "DataX任务已启动"; } } ``` ### 3. 优化与扩展 - **任务调度**:可结合XXL-JOB等分布式任务调度平台实现定时同步任务[^2]。 - **日志监控**:可通过日志文件或集成监控系统(如Prometheus + Grafana)对DataX任务的执行状态进行监控。 - **异常处理**:在任务失败时,应实现重试机制或告警通知机制。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值