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帳號,操作如下。
可選:建立帳號。
操作詳情請參見建立MariaDB帳號。
配置許可權。
在離線讀MariaDB資料時,此帳號需擁有同步表的讀(SELECT)許可權。
在離線寫MariaDB資料時,此帳號需擁有同步表的寫(INSERT、DELETE、UPDATE)許可權。
您可以參考以下命令為帳號添加許可權,或直接給帳號賦予SUPER許可權。如下執行語句在實際使用時,請替換'同步帳號'上述建立的帳號。
-- CREATE USER '同步帳號'@'%' IDENTIFIED BY '密碼'; //建立同步帳號並設定密碼,使其可以通過任意主機登入資料庫。%表示任意主機。 GRANT SELECT, INSERT, DELETE,UPDATE CLIENT ON *.* TO '同步帳號'@'%'; //授權同步帳號資料庫的 SELECT, INSERT, DELETE,UPDATE 許可權。
資料同步任務開發:MariaDB同步流程引導
MariaDB資料同步任務的配置入口和通用配置流程指導可參見下文的配置指導,詳細的配置參數解釋可在配置介面查看對應參數的文案提示。
建立資料來源
在進行資料同步任務開發時,您需要在DataWorks上建立一個對應的資料來源,操作流程請參見建立並管理資料來源。
單表離線同步任務配置指導
操作流程請參見通過指令碼模式配置離線同步任務。
指令碼模式配置的全量參數和指令碼Demo請參見下文的附錄:MariaDB指令碼Demo與參數說明。
附錄:MariaDB指令碼Demo與參數說明
附錄:離線任務指令碼配置方式
如果您配置離線任務時使用指令碼模式的方式進行配置,您需要在任務指令碼中按照指令碼的統一格式要求編寫指令碼中的reader參數和writer參數,指令碼模式的統一要求請參見通過指令碼模式配置離線同步任務,以下為您介紹指令碼模式下的資料來源的Reader參數和Writer參數的指導詳情。
MariaDB 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"
}
]
}
}
MariaDB Reader指令碼參數
指令碼參數名 | 描述 | 是否必選 | 預設值 |
datasource | 資料來源名稱,指令碼模式支援添加資料來源,此配置項填寫的內容必須與添加的資料來源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表名稱,一個Data Integration任務只能同步資料到一張目標表。 table用於配置範圍的進階用法樣本如下:
說明 任務會讀取匹配到的所有表,具體讀取這些表中column配置項指定的列。如果表不存在,或者讀取的列不存在,會導致任務失敗。 | 是 | 無 |
column | 所配置的表中需要同步的列名集合,使用JSON的數組描述欄位資訊 。預設使用所有列配置,例如[ * ]。
| 是 | 無 |
splitPk | MariaDB Reader進行資料幫浦時,如果指定splitPk,表示您希望使用splitPk代表的欄位進行資料分區,資料同步因此會啟動並發任務進行資料同步,提高資料同步的效能。
| 否 | 無 |
where | 篩選條件,在實際業務情境中,往往會選擇當天的資料進行同步,將where條件指定為gmt_create>$bizdate。
| 否 | 無 |
querySql(進階模式,嚮導模式不支援此參數的配置) | 在部分業務情境中,where配置項不足以描述所篩選的條件,您可以通過該配置型來自訂篩選SQL。配置該項後,資料同步系統會忽略tables、columns和splitPk配置項,直接使用該項配置的內容對資料進行篩選。 例如,需要進行多表join後同步資料,使用select a,b from table_a join table_b on table_a.id = table_b.id。當您配置querySql時,MariaDB Reader直接忽略table、column、where和splitPk條件的配置,querySql優先順序大於table、column、where和splitPk選項。datasource通過它解析出使用者名稱和密碼等資訊。 說明 querySql需要區分大小寫,例如,寫為querysql會不生效。 | 否 | 無 |
MariaDB 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"
}
]
}
}
MariaDB Writer指令碼參數
指令碼參數名 | 描述 | 是否必選 | 預設值 |
datasource | 資料來源名稱,指令碼模式支援添加資料來源,此配置項填寫的內容必須與添加的資料來源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表名稱。 | 是 | 無 |
writeMode | 選擇匯入模式,支援insert into、on duplicate key update和replace into三種方式:
| 否 | 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"] 。 | 否 | 無 |