Datax in Dolphinscheduler

DataX一个数据同步框架

DataX 是阿里云 DataWorks数据集成的开源版本,在阿里巴巴集团内被广泛使用的离线数据同步工具/平台。DataX 实现了包括 MySQL、Oracle、OceanBase、SqlServer、Postgre、HDFS、Hive、ADS、HBase、TableStore(OTS)、MaxCompute(ODPS)、Hologres、DRDS, databend 等各种异构数据源之间高效的数据同步功能。

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

1、在Dolphinscheduler中通过自定义Json模版来同步数据

模版结构包括以下部分,具体配置步骤查看DolphinScheduler文档

  • setting: 全局配置,如任务运行速度、错误处理策略。
  • content: 包含具体的数据同步任务详情。
  • reader: 定义数据读取源,包括数据库类型、连接信息、查询语句等。
  • transformer: (可选)数据转换处理,如数据清洗、格式转换。
  • writer: 定义数据写入目标,包括目标数据库信息、表名、列映射等。
  "job": {
    "setting": {
       //...
    },
    "content": [
      {
        "reader": {
          //...
        },
        "transformer": {
          //...
        },
        "writer": {
           //...
        }
      }
    ]
  }
}

2、全局变量配置

模版里面需要引用全局变量,包括数据库连接信息,时间信息等等,如下所示:

3、数据同步策略(插入/更新)

通常在writer中配置 "writeMode": "update",来实现相同主键id的数据执行更新,不存在的执行插入,实际情况依照写入的数据库来,这个案例中使用StarRocks数据直接insert into主键(unique)相同就会自动更新

4、模版应用案例

该样例展示为从 Mysql 数据导入到 StarRocks 中。

{
    "job": {
        "setting": {
            "speed": {
                 "channel": 1
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",   
                    "parameter": {
                        "username": "${dmsusername}",
                        "password": "${dmspassword}",
                        "connection": [
                            {
                                "jdbcUrl": ["${sourcejdbc}"],
		                        "querySql": [  "SELECT ID,ASC_CODE,CLAIM_NO,ASC_NAME,ORG_ID,CLAIM_STATUS,SIGN_STATUS, CLAIM_KIND,RO_NO, VIN,UPDATED_AT FROM tm_xx_order WHERE UPDATED_AT >= '${dms_update_time}';" ]
                                        }
                                    ]
                                }
                            },
		        "transformer": [
                   {
                     "name": "dx_groovy",
                     "parameter": {
                         "code": "for(int i=0;i<record.getColumnNumber();i++){if(record.getColumn(i).getByteSize()!=0){Column column = record.getColumn(i); def str = column.asString(); def newStr=null; newStr=str.replaceAll(\"[\\r\\n\\t]\",\"\"); record.setColumn(i, new StringColumn(newStr)); };};return record;",
                         "extraPackage": []
                      }
                  }
                 ], 		
                "writer": {
                    "name": "starrockswriter",
                    "parameter": {
                        "username": "${srusername}",
                        "password": "${srpassword}",
                        "database": "ods",
                        "table": "ods_xx_tm_xx_order_delta",
                        "column": ["ID","ASC_CODE", "CLAIM_NO", "ASC_NAME","ORG_ID","CLAIM_STATUS", "SIGN_STATUS", "CLAIM_KIND", "RO_NO","VIN","UPDATED_AT"],
                        "postSql": [], 
                        "jdbcUrl": "${targetjdbc}",
                        "loadUrl": [${loadurl}],
                        "loadProps": {}
                    }
                }
            }
        ]
    }
}

posted on 2024-03-19 14:26  滚动的蛋  阅读(393)  评论(0编辑  收藏  举报

导航