全部產品
Search
文件中心

DataWorks:DRDS(PolarDB-X 1.0)資料來源

更新時間:Jun 19, 2024

DRDS(PolarDB-X 1.0)資料來源為您提供讀取和寫入DRDS(PolarDB-X 1.0)雙向通道的功能,本文為您介紹DataWorks的DRDS(PolarDB-X 1.0)資料同步的能力支援情況。

支援的版本

即時讀取

支援DRDS(PolarDB-X 1.0)執行個體。建立DRDS(PolarDB-X 1.0)執行個體的操作可參見建立PolarDB-X 1.0執行個體

使用限制

離線讀寫

  • 目前DRDS(PolarDB-X 1.0)的外掛程式僅適配MySQL引擎的情境。DRDS(PolarDB-X 1.0)是一套分布式MySQL資料庫,並且大部分通訊協定遵守MySQL使用情境。

  • DRDS(PolarDB-X 1.0)下的MySQL8.0版本僅支援使用獨享Data Integration資源群組

  • 在底層實現上,DRDS(PolarDB-X 1.0) Writer通過JDBC串連遠程DRDS(PolarDB-X 1.0)資料庫的Proxy,執行相應的replace into語句,寫入資料至DRDS(PolarDB-X 1.0)。

    執行的SQL語句是replace into,為避免資料重複寫入,需要您的表具備主鍵(Primary Key)或唯一性索引(Unique index)。

  • DRDS(PolarDB-X 1.0) Writer通過資料同步架構擷取Reader產生的協議資料,通過replace into(沒有遇到主鍵/唯一性索引衝突時,與insert into行為一致,衝突時會用新行替換原有行所有欄位)語句寫入資料至DRDS(PolarDB-X 1.0)。DRDS(PolarDB-X 1.0) Writer累積一定資料,提交給DRDS(PolarDB-X 1.0)的Proxy,該Proxy內部決定資料是寫入一張還是多張表,以及多張表寫入時如何路由資料。

    說明

    整個任務至少需要具備replace into的許可權。是否需要其它許可權,取決於您配置任務時在preSql和postSql中指定的語句。

  • 支援閱讀檢視表。

即時讀

  • 目前僅支援使用執行個體模式配置的資料來源,如果您使用JDBC串連串配置的資料來源,任務運行將會出錯。

  • 執行個體的儲存類型:僅支援PolarDB(即租戶側PolarDB MySQL)和存量的使用者RDS(新購已不支援),不支援RDS MySQL(即私人定製RDS MySQL)。

  • 不支援XA ROLLBACK。

    針對已經XA PREPARE的交易資料,即時同步會將其同步到目標端,如果XA ROLLBACK,即時同步不會針對XA PREPARE的資料做復原寫入的操作。若要處理XA ROLLBACK情境,需要手動將XA ROLLBACK的表從即時同步任務中移除,再添加表後重新進行同步。

支援的欄位類型

DRDS(PolarDB-X 1.0) Reader和DRDS(PolarDB-X 1.0) Writer支援大部分DRDS(PolarDB-X 1.0)類型,但也存在個別類型沒有支援的情況,請注意檢查您的資料類型。

DRDS(PolarDB-X 1.0) Reader和DRDS(PolarDB-X 1.0) Writer針對DRDS(PolarDB-X 1.0)類型的轉換列表,如下所示。

類型分類

DRDS(PolarDB-X 1.0)資料類型

整數類

INT、TINYINT、SMALLINT、MEDIUMINT和BIGINT

浮點類

FLOAT、DOUBLE和DECIMAL

字串類

VARCHAR、CHAR、TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT

日期時間類

DATE、DATETIME、TIMESTAMP、TIME和YEAR

布爾類

BIT和BOOL

二進位類

TINYBLOB、MEDIUMBLOB、BLOB、LONGBLOB和VARBINARY

資料同步前準備

您需要規劃一個資料庫的登入賬戶用於後續執行操作,此帳號需要擁有DRDS(PolarDB-X 1.0)的相關操作許可權,詳情請參見建立帳號

資料同步任務開發

DRDS(PolarDB-X 1.0)資料同步任務的配置入口和通用配置流程指導可參見下文的配置指導,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。

建立資料來源

在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源

單表離線同步任務配置指導

整庫離線讀、單表/整庫全增量即時讀同步配置指導

操作流程請參見Data Integration側同步任務配置

常見問題

  • 一致性視圖問題

    DRDS(PolarDB-X 1.0)本身屬於分散式資料庫,對外無法提供一致性的多庫多表視圖。不同於MySQL等單庫單表同步,DRDS(PolarDB-X 1.0) Reader無法抽取同一個時間切片的分庫分錶快照資訊,即DRDS(PolarDB-X 1.0) Reader抽取底層不同的分表將擷取不同的分錶快照,無法保證強一致性。

  • 資料庫編碼問題

    DRDS(PolarDB-X 1.0)本身的編碼設定非常靈活,包括指定編碼到庫、表、欄位層級,甚至可以設定不同編碼。優先順序從高到低為欄位、表、庫、執行個體。建議您在庫層級將編碼統一設定為UTF-8。

    DRDS(PolarDB-X 1.0) Reader底層使用JDBC進行資料幫浦,JDBC天然適配各類編碼,並在底層進行了編碼轉換。因此DRDS(PolarDB-X 1.0) Reader不需要您指定編碼,可以自動擷取編碼並轉碼。

    對於DRDS(PolarDB-X 1.0)底層寫入編碼和其設定的編碼不一致的混亂情況,DRDS(PolarDB-X 1.0) Reader對此無法識別,該類情況的同步結果有可能為亂碼。

  • 增量資料同步的方式

    DRDS(PolarDB-X 1.0) Reader使用JDBC SELECT陳述式完成資料幫浦工作,因此您可以使用SELECT…WHERE…進行增量資料幫浦,方式如下:

    • 資料庫線上應用寫入資料庫時,填充modify欄位為更改時間戳記,包括新增、更新、刪除(邏輯刪除)。對於這類應用,DRDS(PolarDB-X 1.0) Reader只需要where條件後跟上一同步階段時間戳記即可。

    • 對於新增流水型資料,DRDS(PolarDB-X 1.0) Reader在where條件後跟上一階段最大自增ID即可。

    對於業務上無欄位區分新增、修改資料的情況,DRDS(PolarDB-X 1.0) Reader無法進行增量資料同步,只能同步全量資料。

  • 不支援在where語句中配置物理表相關的篩選條件。

附錄:指令碼Demo與參數說明

附錄:離線任務指令碼配置方式

如果您配置離線任務時使用指令碼模式的方式進行配置,您需要在任務指令碼中按照指令碼的統一格式要求編寫指令碼中的reader參數和writer參數,指令碼模式的統一要求請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下的資料來源的Reader參數和Writer參數的指導詳情。

Reader指令碼Demo

{
    "type":"job",
    "version":"2.0",//版本號碼
    "steps":[
        {
            "stepType":"drds",//外掛程式名
            "parameter":{
                "datasource":"",//資料來源名
                "column":[//列名
                    "id",
                    "name"
                ],
                "where":"",//過濾條件
                "table":"",//表名
                "splitPk": ""//切分鍵
            },
            "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"//限流,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Reader指令碼參數

參數

描述

是否必選

預設值

datasource

資料來源名稱,指令碼模式支援添加資料來源,該配置項填寫的內容必須與添加的資料來源名稱保持一致。

table

所選取的需要同步的表。

column

所配置的表中需要同步的列名集合,使用JSON的數組描述欄位資訊,預設使用所有列配置,例如[*]

  • 支援列裁剪,即可以同步部分列。

  • 支援列換序,即可以不根據表Schema資訊的順序同步列。

  • 支援常量配置,您需要按照MySQL的文法格式。例如,["id", "`table`", "1", "'bazhen.csy'", "null", "to_char(a + 1)", "2.3", "true"]。樣本中的參數說明如下:

    • id為普通列名。

    • table包含保留的列名。

    • 1為整型數字常量。

    • bazhen.csy為字串常量。

    • null為空白指標。

    • to_char(a + 1)為計算字串長度函數運算式。

    • 2.3為浮點數。

    • true為布爾值。

  • column必須顯示您指定同步的列集合,不允許為空白 。

where

篩選條件,DRDS(PolarDB-X 1.0) Reader根據指定的columntablewhere條件拼接SQL,並根據該SQL進行資料幫浦:

  • where條件可以有效地進行業務增量同步處理。

  • where條件不配置或者為空白時,視作全表同步資料 。

例如,在測試時使用where條件指定實際業務情境。通常會選擇當天的資料進行同步,您可以指定where條件為STRTODATE('${bdp.system.bizdate}','%Y%m%d') <= today AND today < DATEADD(STRTODATE('${bdp.system.bizdate}', '%Y%m%d'), interval 1 day)

Writer指令碼Demo

{
    "type":"job",
    "version":"2.0",//版本號碼。
    "steps":[
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
                },
        {
            "stepType":"drds",//外掛程式名。
            "parameter":{
                "postSql":[],//執行資料同步任務之後執行的SQL語句。
                "datasource":"",//資料來源。
                "column":[//列名。
                "id"
                ],
                "writeMode":"insert ignore",
                "batchSize":"1024",//一次性批量提交的記錄數大小。
                "table":"test",//表名。
                "preSql":[]//執行資料同步任務之前執行的SQL語句。
                },
            "name":"Writer",
            "category":"writer"
                }
                ],
    "setting":{
        "errorLimit":{
        "record":"0"//錯誤記錄數。
            },
        "speed":{
            "throttle":true,//當throttle值為false時,mbps參數不生效,表示不限流;當throttle值為true時,表示限流。
            "concurrent":1, //作業並發數。
            "mbps":"12"//限流,此處1mbps = 1MB/s。
                }
            },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
                }
            ]
        }
    }

Writer指令碼參數

參數

描述

必選

預設值

datasource

資料來源名稱,指令碼模式支援添加資料來源,該配置項填寫的內容必須與添加的資料來源名稱保持一致。

table

所選取的需要同步的表。

writeMode

選擇匯入模式,包括insert ignorereplace into

  • insert ignore:當主鍵或約束衝突時,忽略來來源資料。

  • replace into:當主鍵或約束衝突時,使用來來源資料替換目標資料。

insert ignore

column

目標表需要寫入資料的欄位,欄位之間用英文逗號(,)分隔,例如"column": ["id", "name", "age"]。如果要依次寫入全部列,使用(*)表示,例如"column": ["*"]

preSql

執行資料同步任務之前率先執行的SQL語句。目前嚮導模式僅允許執行一條SQL語句,指令碼模式可以支援多條SQL語句。

例如delete * from table xxx;,表示同步寫入資料前清理xxx表的資料。請根據自身需求進行配置。

postSql

執行資料同步任務之後執行的SQL語句。目前嚮導模式僅允許執行一條SQL語句,指令碼模式可以支援多條SQL語句。

例如delete * from table xxx where xx=xx;,表示同步資料後,刪除符合某條件的資料。請根據自身需求進行配置。

batchSize

一次性批量提交的記錄數大小,該值可以極大減少資料同步系統與DRDS(PolarDB-X 1.0)的網路互動次數,並提升整體輸送量。如果該值設定過大,會導致資料同步運行進程OOM異常。

1,024