全部產品
Search
文件中心

DataWorks:MariaDB資料來源

更新時間:Oct 24, 2024

MariaDB資料來源為您提供讀取和寫入MariaDB的雙向通道,本文為您介紹DataWorks的MariaDB資料同步能力支援情況。

支援的MariaDB版本

離線讀寫

支援MariaDB 5.5.x、MariaDB 10.0.x、MariaDB 10.1.x、MariaDB 10.2.x、MariaDB 10.3.x版本,且離線同步支援閱讀檢視表。

支援的欄位類型

各版本MariaDB的全量欄位類型請參見MariaDB官方文檔。以下以MariaDB 10.3.x為例,為您羅列當前主要欄位的支援情況。

欄位類型

離線讀(MariaDB Reader)

離線寫(MariaDB 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

不支援

不支援

資料同步前準備:MariaDB環境準備

在DataWorks上進行資料同步前,您需要參考本文提前在MariaDB側進行資料同步環境準備,以便在DataWorks上進行MariaDB資料同步任務配置與執行時服務正常。以下為您介紹MariaDB同步前的相關環境準備。

準備工作1:確認MariaDB版本

Data Integration對MariaDB版本有要求,您可參考上文支援的MariaDB版本章節,查看當前待同步的MariaDB是否符合版本要求。您可以在MariaDB資料庫通過如下語句查看當前MariaDB資料庫版本。

準備工作2:配置帳號許可權

建議您提前規劃並建立一個專用於DataWorks訪問資料來源的MariaDB帳號,操作如下。

  1. 可選:建立帳號。

    操作詳情請參見建立MariaDB帳號

  2. 配置許可權。

    • 在離線讀MariaDB資料時,此帳號需擁有同步表的讀(SELECT)許可權。

    • 在離線寫MariaDB資料時,此帳號需擁有同步表的寫(INSERTDELETEUPDATE)許可權。

  3. 您可以參考以下命令為帳號添加許可權,或直接給帳號賦予SUPER許可權。如下執行語句在實際使用時,請替換'同步帳號'上述建立的帳號。

    -- CREATE USER '同步帳號'@'%' IDENTIFIED BY '密碼'; //建立同步帳號並設定密碼,使其可以通過任意主機登入資料庫。%表示任意主機。
    GRANT SELECT, INSERT, DELETE,UPDATE CLIENT ON *.* TO '同步帳號'@'%'; //授權同步帳號資料庫的 SELECT, INSERT, DELETE,UPDATE 許可權。

建立資料來源

在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源詳細的配置參數解釋可在配置介面查看對應參數的文案提示

資料同步任務開發

資料同步任務的配置入口和通用配置流程可參見下文的配置指導。

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

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

離線任務指令碼配置方式

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

Reader指令碼Demo

{
    "type":"job",
    "version":"2.0",//版本號碼。
    "steps":[
        {
            "stepType":"mariadb",//外掛程式名。
            "parameter":{
                "column":[//列名。
                    "id"
                ],
                "connection":[
                    {   "querySql":["select a,b from join1 c join join2 d on c.id = d.id;"], //使用字串的形式,將querySql寫在connection中。
                        "datasource":"",//資料來源。
                        "table":[//表名,即使只有一張表,也必須以[]的數組形式書寫。
                            "xxx"
                        ]
                    }
                ],
                "where":"",//過濾條件。
                "splitPk":"",//切分鍵。
                "encoding":"UTF-8"//編碼格式。
            },
            "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

選取的需要同步的表名稱,一個Data Integration任務只能同步資料到一張目標表。

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配置項指定的列。如果表不存在,或者讀取的列不存在,會導致任務失敗。

column

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

  • 支援列裁剪:列可以挑選部分列進行匯出。

  • 支援列換序:列可以不按照表schema資訊順序進行匯出。

  • 支援常量配置:您需要按照MariaDB 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

MariaDB Reader進行資料幫浦時,如果指定splitPk,表示您希望使用splitPk代表的欄位進行資料分區,資料同步因此會啟動並發任務進行資料同步,提高資料同步的效能。

  • 推薦splitPk使用者使用表主鍵,因為表主鍵通常情況下比較均勻,因此切分出來的分區也不容易出現資料熱點。

  • 目前splitPk僅支援整型資料切分,不支援字串、浮點和日期等其他類型 。如果您指定其他非支援類型,忽略splitPk功能,使用單通道進行同步。

  • 如果不填寫splitPk,包括不提供splitPk或者splitPk值為空白,資料同步視作使用單通道同步該表資料 。

where

篩選條件,在實際業務情境中,往往會選擇當天的資料進行同步,將where條件指定為gmt_create>$bizdate

  • where條件可以有效地進行業務增量同步處理。如果不填寫where語句,包括不提供wherekeyvalue,資料同步均視作同步全量資料。

  • 不可以將where條件指定為limit 10,這不符合MariaDB SQL where子句約束。

querySql(進階模式,嚮導模式不支援此參數的配置)

在部分業務情境中,where配置項不足以描述所篩選的條件,您可以通過該配置型來自訂篩選SQL。配置該項後,資料同步系統會忽略tablescolumnssplitPk配置項,直接使用該項配置的內容對資料進行篩選。

例如,需要進行多表join後同步資料,使用select a,b from table_a join table_b on table_a.id = table_b.id。當您配置querySql時,MariaDB Reader直接忽略table、column、wheresplitPk條件的配置,querySql優先順序大於tablecolumnwheresplitPk選項。datasource通過它解析出使用者名稱和密碼等資訊。

說明

querySql需要區分大小寫,例如,寫為querysql會不生效。

Writer指令碼Demo

{
    "type":"job",
    "version":"2.0",//版本號碼。
    "steps":[ 
        {
            "stepType":"stream",
            "parameter":{},
            "name":"Reader",
            "category":"reader"
        },
        {
            "stepType":"mariadb",//外掛程式名。
            "parameter":{
                "postSql":[],//匯入後的準備語句。
                "datasource":"",//資料來源。
                "column":[//列名。
                    "id",
                    "value"
                ],
                "writeMode":"insert",//寫入模式,您可以設定為insert、replace或update。
                "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"//限流,控制同步的最高速率,防止對上遊/下遊資料庫讀取/寫入壓力過大,此處1mbps = 1MB/s。
        }
    },
    "order":{
        "hops":[
            {
                "from":"Reader",
                "to":"Writer"
            }
        ]
    }
}

Writer指令碼參數

指令碼參數名

描述

是否必選

預設值

datasource

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

table

選取的需要同步的表名稱。

writeMode

選擇匯入模式,支援insert into、on duplicate key update和replace into三種方式:

  • insert into:當主鍵/唯一性索引衝突時會寫不進去衝突的行,以髒資料的形式體現。如果您通過指令碼模式配置任務,請設定writeMode為insert。

  • on duplicate key update:沒有遇到主鍵/唯一性索引衝突時,與insert into行為一致。衝突時會用新行替換已經指定的欄位的語句,寫入資料至MariaDB。如果您通過指令碼模式配置任務,請設定writeMode為update。

  • replace into:沒有遇到主鍵/唯一性索引衝突時,與insert into行為一致。衝突時會先刪除原有行,再插入新行。即新行會替換原有行的所有欄位。如果您通過指令碼模式配置任務,請設定writeModereplace

insert into

column

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

preSql

執行資料同步任務之前率先執行的SQL語句。目前嚮導模式僅允許執行一條SQL語句,指令碼模式可以支援多條SQL語句。例如,執行前清空表中的舊資料(truncate table tablename)。

說明

當有多條SQL語句時,不支援事務。

postSql

執行資料同步任務之後執行的SQL語句,目前嚮導模式僅允許執行一條SQL語句,指令碼模式可以支援多條SQL語句。例如,加上某一個時間戳記alter table tablename add colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

說明

當有多條SQL語句時,不支援事務。

batchSize

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

256

updateColumn

writeMode配置成update時,發生遇到主鍵/唯一性索引衝突時所更新的欄位。欄位之間用英文逗號所分隔,例如 "updateColumn":["name", "age"]