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": {}
}
}
}
]
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通