PolarDB-X 2.0数据源为您提供读取和写入PolarDB-X 2.0的双向通道,本文为您介绍DataWorks对PolarDB-X 2.0数据同步的能力支持情况。
使用限制
PolarDB-X 2.0数据源支持使用Serverless资源组(推荐)和独享数据集成资源组。
支持的版本
离线读写:支持PolarDB-X 2.0,且离线同步支持读取视图。
支持的字段类型
PolarDB-X 2.0的全量字段类型请参见数据类型。下面为您罗列当前主要字段的支持情况。
| 字段类型 | 离线读(PolarDB-X 2.0 Reader) | 离线写(PolarDB-X 2.0 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 | 不支持 | 不支持 | 
数据同步前准备
在DataWorks上进行数据同步前,您需要参考本文提前在PolarDB-X 2.0侧进行数据同步环境准备,以便在DataWorks上进行PolarDB-X 2.0数据同步任务配置与执行时服务正常。以下为您介绍PolarDB-X 2.0同步前的相关环境准备。
确认PolarDB-X版本
PolarDB-X 1.0请使用DRDS数据源,PolarDB-X 2.0使用本数据源。
配置账号权限
建议您提前规划并创建一个专用于DataWorks访问数据源的PolarDB-X 2.0账号,操作如下。
- (可选)进入PolarDB-X 2.0管控台创建账号。若您已有账号,可忽略该步骤。 
- 配置权限。 - 离线同步场景下: - 离线读PolarDB-X 2.0数据时,此账号需拥有同步表的读(SELECT)权限。 
- 离线写PolarDB-X 2.0数据时,此账号需拥有同步表的写(INSERT、DELETE、UPDATE)权限。 
 
- 实时同步场景下(整库实时): - 高权限账号:默认可以读取Binlog,用于实时同步。 
- 普通账号:请使用高权限账号赋予普通账号指定数据库的SELECT、REPLICATION SLAVE、REPLICATION CLIENT权限。 
 
 
-- 创建同步账号并设置密码,使其可以通过任意主机登录数据库。%表示任意主机。
-- CREATE USER '同步账号'@'%' IDENTIFIED BY '密码'。
-- 授权同步账号数据库的 SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限。
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '同步账号'@'%'; 创建数据源
在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源,详细的配置参数解释可在配置界面查看对应参数的文案提示。
数据同步任务开发:PolarDB-X 2.0同步流程引导
数据同步任务的配置入口和通用配置流程可参见下文的配置指导。
单表离线同步任务配置指导
- 操作流程请参见通过脚本模式配置离线同步任务。 
- 脚本模式配置的全量参数和脚本Demo请参见下文的附录:脚本Demo与参数说明。 
附录:脚本Demo与参数说明
离线任务脚本配置方式
如果您配置离线任务时使用脚本模式的方式进行配置,您需要按照统一的脚本格式要求,在任务脚本中编写相应的参数,详情请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下数据源的参数配置详情。
Reader脚本Demo
{
    "type":"job",
    "version":"2.0",//版本号。
    "steps":[
        {
            "stepType":"polardbx20",//插件名。
            "parameter":{
               "connection": [
                  {
                      "datasource":"",
                      "table": [
                          "t1"
                      ]
                  }
              ],
              "column": [
                  "c1",
                  "c2",
                  "'const'"
              ],
              "where": "",
              "splitPk": "",
              "checkSlave": "true",
              "slaveDelayLimit": "300"
            },
            "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"//限流
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}Reader脚本参数
| 脚本参数名 | 描述 | 是否必选 | 默认值 | 
| datasource | 数据源名称。该名称必须与数据源管理界面创建的PolarDB-X 2.0数据源名称保持一致。 | 是 | 无 | 
| table | 需要同步的表名称,仅支持单表。 | 是 | 无 | 
| column | 所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。默认使用所有列配置,例如[*]。 
 
 | 是 | 无 | 
| splitPk | 使用PolarDB-X 2.0 Reader抽取数据,可通过splitPk字段进行数据分片,实现并发同步数据,提高同步效率。 
 | 否 | 无 | 
| where | 筛选条件,在实际业务场景中,往往会选择当天的数据进行同步,将where条件指定为 
 | 否 | 无 | 
| checkSlave | 数据库主备时延检查,当数据源使用PolarDB-X 2.0只读实例时,在任务开始前,会检查只读实例和主实例的延迟时间,以避免主备延迟造成的数据丢失问题。 | 否 | true | 
| slaveDelayLimit | 单位为秒,检查只读实例和主实例的延迟时间,当延迟时间超过本配置时,任务运行失败。用于避免主备延迟造成的数据丢失问题。 | 否 | 30 | 
Writer脚本Demo
{
    "type":"job",
    "version":"2.0",//版本号。
    "steps":[ 
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"PolarDB-X 2.0",//插件名。
            "parameter":{
                "postSql":[],//导入后的准备语句。
                "datasource":"",//数据源。
                "column":[//列名。
                    "id",
                    "value"
                ],
                "writeMode":"insert",//写入模式,您可以设置为insert、replace。
                "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"//限流,控制同步的最高速率,防止对上游/下游数据库读取/写入压力过大。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}Writer脚本参数
| 脚本参数名 | 描述 | 是否必选 | 默认值 | 
| datasource | 数据源名称。该名称必须与数据源管理界面创建的PolarDB-X 2.0数据源名称保持一致。 | 是 | 无 | 
| table | 选取的需要同步的表名称。 | 是 | 无 | 
| writeMode | 选择导入模式,支持insert into和replace into两种方式: 
 | 否 | insert | 
| column | 目标表需要写入数据的字段,字段之间用英文逗号分隔,例如"column": ["id", "name", "age"]。如果要依次写入全部列,使用星号(*)表示,例如"column": ["*"]。 | 是 | 无 | 
| preSql | 执行数据同步任务之前,需率先执行的SQL语句。目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,执行前清空表中的旧数据: 说明  当有多条SQL语句时,不支持事务。 | 否 | 无 | 
| postSql | 执行数据同步任务之后执行的SQL语句,目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,加上某个时间戳: 说明  当有多条SQL语句时,不支持事务。 | 否 | 无 | 
| batchSize | 一次性批量提交的记录数大小,该值可以极大减少数据同步系统与PolarDB-X 2.0的网络交互次数,并提升整体吞吐量。但是如果该值设置过大,会导致内存溢出。 | 否 | 256 |