TiDB数据源

TiDB数据源为您提供了离线读写双向通道,本文为您介绍DataWorks的TiDB数据同步的能力支持情况。

支持的TiDB版本

  • 离线读取:TiDB 7.x、8.x版本。

  • 离线写入:暂不支持。

  • 实时读写:暂不支持。

说明

TiDB 高度兼容MySQL协议,以及 MySQL 5.7和 MySQL 8.0常用的功能及语法。DataWorks离线读写TiDB是基于MySQL协议进行数据同步。TiDB与MySQL兼容性,相关参考文档:TiDB与MySQL兼容性对比

支持的字段类型

TiDB的全量字段类型请参见TiDB数据类型概述,以下为您罗列主要字段支持情况。

字段类型

离线读(TiDB Reader)

离线写(TiDB Writer)

TINYINT

支持

支持

SMALLINT

支持

支持

MEDIUMINT

支持

支持

INTEGER

支持

支持

BIGINT

支持

支持

FLOAT

支持

支持

DOUBLE

支持

支持

DECIMAL

支持

支持

CHAR

支持

支持

VARCHAR

支持

支持

JSON

支持

支持

TEXT

支持

支持

TINYTEXT

支持

支持

MEDIUMTEXT

支持

支持

LONGTEXT

支持

支持

VARBINARY

支持

支持

BINARY

支持

支持

BLOB

支持

支持

TINYBLOB

支持

支持

MEDIUMBLOB

支持

支持

LONGBLOB

支持

支持

ENUM

支持

支持

SET

支持

支持

BOOLEAN

支持

支持

BIT

支持

支持

DATE

支持

支持

DATETIME

支持

支持

TIMESTAMP

支持

支持

TIME

支持

支持

YEAR

支持

支持

数据同步前准备:TiDB环境准备

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

准备工作1:确认TiDB版本

数据集成对TiDB版本有7.x8.x的版本要求,需要您确认前待同步的TiDB是否符合版本要求。您可以在TiDB数据库通过如下语句查看当前TiDB数据库版本。

SELECT TIDB_VERSION()\G

*************************** 1. row ***************************
TIDB_VERSION(): Release Version: v8.1.1
Edition: Community
Git Commit Hash: 821e491a20fbab36604b36b647b5bae26a2c1418
Git Branch: HEAD
UTC Build Time: 2024-08-27 19:16:25
GoVersion: go1.21.10
Race Enabled: false
Check Table Before Drop: false
Store: tikv
1 row in set (0.00 sec)

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

可提前规划并创建一个专用于DataWorks访问数据源的TiDB账号,操作如下:

  1. (可选)创建账号,操作详情请参见:TiDB 用户账户管理

  2. 配置权限。

    • 在离线读TiDB数据时,此账号需拥有同步表的读(SELECT)权限。

    • 在离线写TiDB数据时,此账号需拥有同步表的写(INSERTDELETEUPDATE)权限。

    可以参考以下命令为账号添加权限,或直接给账号赋予SUPER权限。如下执行语句在实际使用时,请替换'同步账号'为上述创建的账号。

    -- CREATE USER '同步账号'@'%' IDENTIFIED BY '密码'; //创建同步账号并设置密码,使其可以通过任意主机登录数据库。%表示任意主机。
    GRANT SELECT ON *.* TO '同步账号'@'%'; //授权同步账号数据库的 SELECT权限。

    *.*表示授权同步账号对所有数据库的所有表拥有上述权限。您也可以指定授权同步账号对目标数据库的指定表拥有上述权限。例如,授权同步账号对test数据库的user表拥有上述权限,则可以使用GRANT SELECT ON test.user TO '同步账号'@'%';语句。

    说明

    REPLICATION SLAVE语句为全局权限,不能指定授权同步账号对目标数据库的指定表拥有相关权限。

创建数据源

在进行数据同步任务开发时,您需要在DataWorks上创建一个对应的数据源,操作流程请参见创建并管理数据源详细的配置参数解释可在配置界面查看对应参数的文案提示

附录:TiDB脚本Demo与参数说明

离线任务脚本配置方式

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

Reader脚本Demo

本文为您提供单库单表和分库分表的配置示例:

说明

本文JSON示例中的注释仅用于展示部分重要参数含义,实际配置时,请移除注释内容。

{
  "type": "job",
  "version": "2.0",
  "steps":
  [
    {
      "stepType": "tidb",
      "parameter":
      {
        "column":
        [
          "id",
          "name"
        ],
        "where": "",
        "splitPk": "id",
        "connection":
        [
          {
            "selectedDatabase": "test_database",
            "datasource": "test_datasource",
            "table":
            [
              "test_table"
            ]
          }
        ]
      },
      "name": "Reader",
      "category": "reader"
    },
    {
      "stepType": "odps",
      "parameter":
      {
      },
      "name": "Writer",
      "category": "writer"
    }
  ],
  "setting":
  {
    "errorLimit":
    {
      "record": "0"
    },
    "speed":
    {
      "throttle": false,
      "concurrent": 3
    }
  },
  "order":
  {
    "hops":
    [
      {
        "from": "Reader",
        "to": "Writer"
      }
    ]
  }
}

Reader脚本参数

脚本参数名

描述

是否必选

默认值

datasource

数据源名称,脚本模式支持添加数据源,此配置项填写的内容必须与添加的数据源名称保持一致。

table

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

table用于配置范围的高级用法示例如下:

  • 您可以通过配置区间读取分库分表,例如'table_[0-99]'表示读取'table_0''table_1''table_2'直到'table_99'

  • 如果您的表数字后缀的长度一致,例如'table_000''table_001''table_002'直到'table_999',您可以配置为'"table": ["table_00[0-9]", "table_0[10-99]", "table_[100-999]"]'

column

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

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

  • 支持列换序:列可以不按照表schema信息顺序进行导出。

  • 支持常量配置:您需要按照MySQL的SQL语法格式,例如["id","table","1","'test_constant'","'null'","to_char(a+1)","2.3","true"]

    • id为普通列名。

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

    • 1为整型数字常量。

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

    • 关于null:

      • " "表示空。

      • null表示null。

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

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

    • 2.3为浮点数。

    • true为布尔值。

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

splitPk

TiDB Reader进行数据抽取时,如果指定splitPk,表示您希望使用splitPk代表的字段进行数据分片,数据同步因此会启动并发任务进行数据同步,提高数据同步的效能。

  • 推荐splitPk用户使用表主键,因为表主键通常情况下比较均匀,因此切分出来的分片也不容易出现数据热点。

  • 目前splitPk仅支持整型数据切分,不支持字符串、浮点和日期等其他类型 。如果您指定其他非支持类型,忽略splitPk功能,使用单通道进行同步。

  • 如果不填写splitPk,包括不提供splitPk或者splitPk值为空,数据同步视作使用单通道同步该表数据 。

where

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

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

  • where条件中不支持配置limit语法。