全部產品
Search
文件中心

DataWorks:TiDB資料來源

更新時間:Dec 20, 2024

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)

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版本

Data Integration對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)許可權。

    可以參考以下命令為帳號添加許可權,或直接給帳號賦予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文法。