MariaDB数据源为您提供读取和写入MariaDB的双向通道,本文为您介绍DataWorks的MariaDB数据同步能力支持情况。
支持的MariaDB版本
MariaDB数据源支持以下版本:
支持MariaDB 5.5.x、MariaDB 10.0.x、MariaDB 10.1.x、MariaDB 10.2.x、MariaDB 10.3.x版本,且离线同步支持读取视图表。
支持的字段类型
各版本MariaDB的全量字段类型请参见MariaDB官方文档。以下以MariaDB 10.3.x为例,为您罗列当前主要字段的支持情况。
字段类型 | 离线读(MariaDB Reader) | 离线写(MariaDB Writer) |
字段类型 | 离线读(MariaDB Reader) | 离线写(MariaDB Writer) |
TINYINT | 支持 | 支持 |
SMALLINT | 支持 | 支持 |
INTEGER | 支持 | 支持 |
BIGINT | 支持 | 支持 |
FLOAT | 支持 | 支持 |
DOUBLE | 支持 | 支持 |
DECIMAL/NUMBERIC | 支持 | 支持 |
REAL | 不支持 | 不支持 |
VARCHAR | 支持 | 支持 |
JSON | 支持 | 支持 |
TEXT | 支持 | 支持 |
MEDIUMTEXT | 支持 | 支持 |
LONGTEXT | 支持 | 支持 |
VARBINARY | 支持 | 支持 |
BINARY | 支持 | 支持 |
TINYBLOB | 支持 | 支持 |
MEDIUMBLOB | 支持 | 支持 |
LONGBLOB | 支持 | 支持 |
ENUM | 支持 | 支持 |
SET | 支持 | 支持 |
BOOLEAN | 支持 | 支持 |
BIT | 支持 | 支持 |
DATE | 支持 | 支持 |
DATETIME | 支持 | 支持 |
TIMESTAMP | 支持 | 支持 |
TIME | 支持 | 支持 |
YEAR | 支持 | 支持 |
LINESTRING | 不支持 | 不支持 |
POLYGON | 不支持 | 不支持 |
MULTIPOINT | 不支持 | 不支持 |
MULTILINESTRING | 不支持 | 不支持 |
MULTIPOLYGON | 不支持 | 不支持 |
GEOMETRYCOLLECTION | 不支持 | 不支持 |
数据同步前准备:MariaDB环境准备
在DataWorks上进行数据同步前,您需要参考本文提前在MariaDB侧进行数据同步环境准备,以便在DataWorks上进行MariaDB数据同步任务配置与执行时服务正常。以下为您介绍MariaDB同步前的相关环境准备。
确认MariaDB版本
数据集成对MariaDB版本有要求,您可参考上文支持的MariaDB版本章节,查看当前待同步的MariaDB是否符合版本要求。您可以在MariaDB数据库通过如下语句查看当前MariaDB数据库版本。
配置账号权限
建议您提前规划并创建一个专用于DataWorks访问数据源的MariaDB账号,操作如下。
(可选)创建账号。
操作详情请参见创建MariaDB账号。
配置权限。
在离线读MariaDB数据时,此账号需拥有同步表的读(SELECT)权限。
在离线写入MariaDB数据时,此账号需拥有同步表的写(INSERT、DELETE、UPDATE)权限。
您可以参考以下命令为账号添加权限,或直接给账号赋予SUPER权限。如下执行语句在实际使用时,请替换'同步账号'上述创建的账号。
-- CREATE USER '同步账号'@'%' IDENTIFIED BY '密码'; //创建同步账号并设置密码,使其可以通过任意主机登录数据库。%表示任意主机。 GRANT SELECT, INSERT, DELETE,UPDATE CLIENT ON *.* TO '同步账号'@'%'; //授权同步账号数据库的 SELECT, INSERT, DELETE,UPDATE 权限。
创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
操作流程请参见通过脚本模式配置离线同步任务。
脚本模式配置的全量参数和脚本Demo请参见下文的附录:MariaDB脚本Demo与参数说明。
附录:MariaDB脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。
Reader脚本Demo
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"mariadb",//插件名。
"parameter":{
"column":[//列名。
"id"
],
"connection":[
{ "querySql":["select a,b from join1 c join join2 d on c.id = d.id;"], //使用字符串的形式,将querySql写在connection中。
"datasource":"",//数据源。
"table":[//表名,即使只有一张表,也必须以[]的数组形式书写。
"xxx"
]
}
],
"where":"",//过滤条件。
"splitPk":"",//切分键。
"encoding":"UTF-8"//编码格式。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"//错误记录数。
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1,//作业并发数。
"mbps":"12"//限流,此处1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Reader脚本参数
脚本参数名 | 描述 | 是否必选 | 默认值 |
脚本参数名 | 描述 | 是否必选 | 默认值 |
datasource | 数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。 | 是 | 无 |
table | 选取的需要同步的表名称,一个数据集成任务只能同步数据到一张目标表。 table用于配置范围的高级用法示例如下:
任务会读取匹配到的所有表,具体读取这些表中column配置项指定的列。如果表不存在,或者读取的列不存在,会导致任务失败。 | 是 | 无 |
column | 所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息 。默认使用所有列配置,例如[ * ]。
| 是 | 无 |
splitPk | MariaDB Reader进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高数据同步的效率。
| 否 | 无 |
where | 筛选条件,在实际业务场景中,往往会选择当天的数据进行同步,将where条件指定为gmt_create>$bizdate。
| 否 | 无 |
querySql(高级模式,向导模式不支持此参数的配置) | 在部分业务场景中,where配置项不足以描述所筛选的条件,您可以通过该配置项来定义筛选SQL。配置该项后,数据同步系统会忽略tables、columns和splitPk配置项,直接使用该项配置的内容对数据进行筛选。 例如,需要进行多表join后同步数据,使用select a,b from table_a join table_b on table_a.id = table_b.id。当您配置querySql时,MariaDB Reader直接忽略table、column、where和splitPk条件的配置,querySql优先级大于table、column、where和splitPk选项。datasource通过它解析出用户名和密码等信息。 querySql需要区分大小写,例如,写为querysql会不生效。 | 否 | 无 |
Writer脚本Demo
{
"type":"job",
"version":"2.0",//版本号。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"mariadb",//插件名。
"parameter":{
"postSql":[],//导入后的准备语句。
"datasource":"",//数据源。
"column":[//列名。
"id",
"value"
],
"writeMode":"insert",//写入模式,您可以设置为insert、replace或update。
"batchSize":1024,//一次性批量提交的记录数大小。
"table":"",//表名。
"preSql":[
"delete from XXX;" //导入前的准备语句。
]
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{//错误记录数。
"record":"0"
},
"speed":{
"throttle":true,//当throttle值为false时,mbps参数不生效,表示不限流;当throttle值为true时,表示限流。
"concurrent":1, //作业并发数。
"mbps":"12"//限流,控制同步的最高速率,防止对上游/下游数据库读取/写入压力过大,此处1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer脚本参数
脚本参数名 | 描述 | 是否必选 | 默认值 |
datasource | 数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。 | 是 | 无 |
table | 选取的需要同步的表名称。 | 是 | 无 |
writeMode | 选择导入模式,支持insert into、on duplicate key update和replace into三种方式:
| 否 | insert into |
column | 目标表需要写入数据的字段,字段之间用英文所逗号分隔,例如"column": ["id", "name", "age"]。如果要依次写入全部列,使用星号(*)表示, 例如"column": ["*"]。 | 是 | 无 |
preSql | 执行数据同步任务之前率先执行的SQL语句。目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,执行前清空表中的旧数据(truncate table tablename)。 当有多条SQL语句时,不支持事务。 | 否 | 无 |
postSql | 执行数据同步任务之后执行的SQL语句,目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,加上某一个时间戳 当有多条SQL语句时,不支持事务。 | 否 | 无 |
batchSize | 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与MariaDB的网络交互次数,并提升整体吞吐量。如果该值设置过大,会导致数据同步运行进程OOM异常。 | 否 | 256 |
updateColumn | 当writeMode配置成update时,发生主键/唯一性索引冲突时所更新字段。字段之间用英文逗号所分隔,例如 "updateColumn":["name", "age"] 。 | 否 | 无 |
- 本页导读 (1)
- 支持的MariaDB版本
- 支持的字段类型
- 数据同步前准备:MariaDB环境准备
- 确认MariaDB版本
- 配置账号权限
- 创建数据源
- 数据同步任务开发
- 单表离线同步任务配置指导
- 附录:MariaDB脚本Demo与参数说明
- 离线任务脚本配置方式
- Reader脚本Demo
- Reader脚本参数
- Writer脚本Demo
- Writer脚本参数