当您需要在DataWorks中同步PolarDB-X 2.0的数据时,直接使用通用的MySQL类型数据源可能会引发并行读取效率低下、数据库资源过度消耗甚至任务异常等问题。为确保数据同步任务的高效与稳定,建议您使用专为PolarDB-X 2.0优化的专属数据源类型。本文将指导您如何配置和使用PolarDB-X 2.0数据源,并介绍其独有的优化参数。
功能简介
DataWorks中的PolarDB-X 2.0数据源是为PolarDB-X分布式架构量身定制的。与通用MySQL数据源不同,它能够识别PolarDB-X的分区表拓扑,从而实现按分区进行并行数据读取。这种优化的读取方式可以最大化利用数据库资源,显著提升数据同步性能,并避免因不合理的扫描方式对线上业务造成冲击。
适用范围
仅适用于PolarDB-X 2.0实例。
如您使用的是PolarDB-X 1.0实例,请选择DRDS(PolarDB-X 1.0)数据源。
操作指南
步骤一:配置账号权限
执行数据同步任务的数据库账号需要具备以下权限。
离线同步:
离线读(Reader):账号需要对目标库拥有
SELECT权限。说明由于Reader在执行前会通过
SHOW TOPOLOGY FROM <table_name>指令获取表的拓扑信息,因此需确保该账号具备目标库的读权限。离线写(Writer):账号需要对目标表拥有
INSERT、DELETE、UPDATE权限。
实时同步(整库实时):
高权限账号:默认可以读取Binlog,用于实时同步。
普通账号:需由高权限账号为其授予
SELECT、REPLICATION SLAVE、REPLICATION CLIENT权限。
步骤二:创建数据源
在DataWorks控制台新增数据源时,需要选择PolarDB-X 2.0。其他详细参数与配置,请参见创建数据源。
进入管理中心页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的,在下拉框中选择对应工作空间后单击进入管理中心。
单击左侧导航栏的,进入数据源页面。
单击页面左上角的新增数据源。

步骤三:(可选)使用自定义连接地址实现负载隔离
如果大量DataWorks任务对某些CN节点造成负载压力,您可以通过自定义连接地址将DataWorks的读写流量路由到专用的CN节点,实现负载隔离。
前往PolarDB分布式版控制台,找到并进入目标实例。
在左侧导航栏中,单击。
进入自定义地址页签,单击创建自定义连接,配置相关参数。
说明若您的实例是三可用区实例时,自带Standby CN,并且Standby CN不承担业务流量,特别适合供DataWorks使用。如下图,可在实例详情页内计算节点列表内找到未激活的节点,即为Standby节点。

若您的实例不是三可用区实例时,您可以:
变更可用区,将单可用区变更为三可用区,三可用区实例价格和单可用区实例一致。
创建多个自定义连接地,供业务和DataWorks使用。
在DataWorks中使用:创建或修改DataWorks数据源时,配置方式选择使用连接串模式,并将上一步创建的自定义连接地址填入主机地址/IP中即可。

步骤四:数据同步任务开发
因部分高级参数需要在脚本模式下进行配置,建议您通过脚本模式配置数据同步任务。详细步骤与说明,请参考通过脚本模式配置离线同步任务。
配置数据读取(Reader)
以下是Reader的核心参数说明,部分高级参数需要在脚本模式下配置。
参数名 | 描述 | 是否必选 | 默认值 |
| 需要同步的表名称,仅支持单表。 | 是 | 无 |
| 需要同步的列名集合,以JSON数组格式定义。
较复杂示例如下: | 是 | 无 |
| 数据过滤条件,将直接拼接到 说明 该过滤条件并非在DataWorks层进行过滤,而是直接拼到SQL中。例如,上文的例子等价于执行SQL:
不推荐在生产库通过该参数指定过滤条件,如要使用,需谨慎评估该SQL的性能。 | 否 | 无 |
| 核心优化参数。当读取的表为分区表时,建议将该参数设置为 说明 使用 | 否 |
|
| 该参数已废弃,不建议使用。 | 否 | 无 |
示例脚本
{
"stepType": "polardbx20",
"parameter": {
"checkSlave": "false",
"slaveDelayLimit": "300",
"datasource": "ms_polardbx",
"envType": 1,
"column": ["c1+c2",
"FROM_UNIXTIME(c3)",
"CAST(c4 AS SIGNED)",
"c5",
"c5",
"c5",
"IFNULL(c6,0)",
"IF(c7>10,c7,c8)",
],
"tableComment": "",
"onePartitionOneTask":true // 当读取的表为分区表时推荐设置该参数为true
},
"name": "Reader",
"category": "reader"
}配置数据写入(Writer)
以下是Writer的核心参数说明。
参数名 | 描述 | 是否必选 | 默认值 |
| 目标表的名称。 | 是 | 无 |
| 选择导入模式,支持以下模式:
| 否 |
|
| 配合 | 否 | 无 |
| 需要写入数据的目标表列名,字段之间用英文逗号分隔,例如 | 是 | 无 |
| 执行数据同步任务之前,需率先执行的SQL语句。目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。 | 否 | 无 |
| 执行数据同步任务之后执行的SQL语句,目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。 | 否 | 无 |
| 批量写入的记录数量。增大此值可减少数据同步系统与PolarDB-X 2.0之间的网络交互次数,从而提升整体吞吐量。然而,如果设置过大,将会增加内存消耗,并可能导致内存溢出。 | 否 | 256 |
| 是否开启自动重试(如死锁、锁等待超时)。当表有主键或唯一键时,建议设置为 说明 当表中不包含主键或唯一键时,重试可能导致数据出现重复。 | 否 |
|
| 与 | 否 | ["Lock wait timeout exceeded", "Deadlock found when trying to get lock", "Query execution was interrupted"] |
| 与 | 否 | 100 |
| 是否在连接中断(如网络闪断、主备切换)后自动重连并重试。当表有主键或唯一键时,建议设置为 说明 当表中不包含主键或唯一键时,重试可能导致数据出现重复。 | 否 |
|
示例脚本
{
"stepType": "polardbx20",
"parameter": {
"postSql": [],
"datasource": "ms_polardbx",
"envType": 1,
"column": [
"id",
"c1",
"c2",
"c3",
"c4"
],
"tableComment": "",
"writeMode": "insert ignore",
"batchSize": 256,
"table": "tbl",
"preSql": [],
"enableRetry": true, //如果数据带有主键或者唯一键,建议设置为true
"enableReConnect": true //如果数据带有主键或者唯一键,建议设置为true
},
"name": "Writer",
"category": "writer"
}