文档

PolarDB-X 2.0数据源

更新时间:

PolarDB-X 2.0数据源为您提供读取和写入PolarDB-X 2.0的双向通道,本文为您介绍DataWorks的PolarDB-X 2.0数据同步的能力支持情况。

使用限制

PolarDB-X 2.0数据源仅支持使用独享数据集成资源组

支持的版本

离线读写:支持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

不支持

不支持

数据同步前准备:PolarDB-X 2.0环境准备

在DataWorks上进行数据同步前,您需要参考本文提前在PolarDB-X 2.0侧进行数据同步环境准备,以便在DataWorks上进行PolarDB-X 2.0数据同步任务配置与执行时服务正常。以下为您介绍PolarDB-X 2.0同步前的相关环境准备。

准备工作1:确认PolarDB-X版本

PolarDB-X 1.0请使用DRDS数据源,PolarDB-X 2.0使用本数据源。

准备工作2:配置账号权限

建议您提前规划并创建一个专用于DataWorks访问数据源的PolarDB-X 2.0账号,操作如下。

  1. (可选)进入PolarDB-X 2.0管控台创建账号。若您已有账号,可忽略该步骤。

  2. 配置权限。

    • 离线同步场景下:

      • 离线读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 '同步账号'@'%'; 

数据同步任务开发:PolarDB-X 2.0同步流程引导

PolarDB-X 2.0数据同步任务的配置入口和通用配置流程指导可参见下文的配置指导,详细的配置参数解释可在配置界面查看对应参数的文案提示。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源

单表离线同步任务配置指导

附录:PolarDB-X 2.0脚本Demo与参数说明

离线任务脚本配置方式

如果您配置离线任务时使用脚本模式的方式进行配置,您需要在任务脚本中按照脚本的统一格式要求编写脚本中的Reader参数和Writer参数,脚本模式的统一要求请参见通过脚本模式配置离线同步任务,以下为您介绍脚本模式下的数据源的Reader参数和Writer参数的指导详情。

PolarDB-X 2.0 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"
            }
        ]
    }
}

PolarDB-X 2.0 Reader脚本参数

脚本参数名

描述

是否必选

默认值

datasource

数据源名称。该名称必须与数据源管理界面创建的PolarDB-X 2.0数据源名称保持一致。

table

需要同步的表名称,仅支持单表。

column

所配置的表中需要同步的列名集合,使用JSON的数组描述字段信息。默认使用所有列配置,例如[*]。

  • 支持列裁剪:可以挑选部分列进行同步。

  • 支持列换序:列可以不按照表Schema信息顺序进行同步。

  • 支持常量配置:需遵循PolarDB-X 2.0 SQL语法格式,例如["id","table","1","'mingya.wmy'","'null'","to_char(a+1)","2.3","true"]

    • id为普通列名。

    • table为包含保留字的列名。

    • 1为整型数字常量。

    • 'mingya.wmy'为字符串常量(注意需要加上一对单引号)。

    • 关于null

      • " "表示空。

      • null表示null。

      • 'null'表示null这个字符串。

    • to_char(a+1)为计算字符串长度函数。

    • 2.3为浮点数。

    • true为布尔值。

  • column必须显示指定同步的列集合,不允许为空。

splitPk

使用PolarDB-X 2.0 Reader抽取数据,可通过splitPk字段进行数据分片,实现并发同步数据,提高同步效能。

  • (推荐)splitPk设置为表主键。通过表主键切分出的分片比较均匀,不容易出现数据热点。

  • splitPk仅支持整型数据切分,不支持字符串、浮点和日期等其他类型。若使用了不支持的类型,平台将忽略splitPk功能,使用单通道同步数据。

  • 若不配置splitPk参数(即Reader脚本中不包含该参数)或splitPk参数取值为空,平台将使用单通道同步数据 。

where

筛选条件,在实际业务场景中,往往会选择当天的数据进行同步,将where条件指定为gmt_create>$bizdate

  • where条件可以有效地进行业务增量同步。如果不填写where条件,包括不提供wherekeyvalue,数据同步均视作同步全量数据。

  • 不可以将where条件指定为LIMIT 10,这不符合PolarDB-X 2.0 SQL WHERE子句约束。

checkSlave

数据库主备时延检查,当数据源使用PolarDB-X 2.0只读实例时,在任务开始前,会检查只读实例和主实例的延迟时间。用于避免主备延迟造成的数据丢失问题。

true

slaveDelayLimit

单位为秒,检查只读实例和主实例的延迟时间,当延迟时间超过本配置时,任务运行失败。用于避免主备延迟造成的数据丢失问题。

30

PolarDB-X 2.0 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"
            }
        ]
    }
}

PolarDB-X 2.0 Writer脚本参数

脚本参数名

描述

是否必选

默认值

datasource

数据源名称。该名称必须与数据源管理界面创建的PolarDB-X 2.0数据源名称保持一致。

table

选取的需要同步的表名称。

writeMode

选择导入模式,支持insert intoreplace into两种方式:

  • insert into:当主键/唯一性索引冲突时会写不进去冲突的行,以脏数据的形式体现。如果您通过脚本模式配置任务,请设置writeMode为insert。

  • replace into:没有遇到主键/唯一性索引冲突时,与insert into行为一致。冲突时会先删除原有行,再插入新行。即新行会替换原有行的所有字段。如果您通过脚本模式配置任务,请设置writeMode为replace。

insert

column

目标表需要写入数据的字段,字段之间用英文逗号分隔,例如"column": ["id", "name", "age"]。如果要依次写入全部列,使用星号(*)表示,例如"column": ["*"]

preSql

执行数据同步任务之前率先执行的SQL语句。目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,执行前清空表中的旧数据:

-- tablename为表名
truncate table tablename;
说明

当有多条SQL语句时,不支持事务。

postSql

执行数据同步任务之后执行的SQL语句,目前向导模式仅允许执行一条SQL语句,脚本模式可以支持多条SQL语句。例如,加上某一个时间戳:

-- tablename为表名,colname为列名
alter table tablename 
add colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
说明

当有多条SQL语句时,不支持事务。

batchSize

一次性批量提交的记录数大小,该值可以极大减少数据同步系统与PolarDB-X 2.0的网络交互次数,并提升整体吞吐量。但是如果该值设置过大,会导致内存溢出。

256