MariaDB數(shù)據(jù)源
MariaDB數(shù)據(jù)源為您提供讀取和寫入MariaDB的雙向通道,本文為您介紹DataWorks的MariaDB數(shù)據(jù)同步能力支持情況。
支持的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為例,為您羅列當(dāng)前主要字段的支持情況。
字段類型 | 離線讀(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 | 不支持 | 不支持 |
數(shù)據(jù)同步前準(zhǔn)備:MariaDB環(huán)境準(zhǔn)備
在DataWorks上進(jìn)行數(shù)據(jù)同步前,您需要參考本文提前在MariaDB側(cè)進(jìn)行數(shù)據(jù)同步環(huán)境準(zhǔn)備,以便在DataWorks上進(jìn)行MariaDB數(shù)據(jù)同步任務(wù)配置與執(zhí)行時(shí)服務(wù)正常。以下為您介紹MariaDB同步前的相關(guān)環(huán)境準(zhǔn)備。
準(zhǔn)備工作1:確認(rèn)MariaDB版本
數(shù)據(jù)集成對MariaDB版本有要求,您可參考上文支持的MariaDB版本章節(jié),查看當(dāng)前待同步的MariaDB是否符合版本要求。您可以在MariaDB數(shù)據(jù)庫通過如下語句查看當(dāng)前MariaDB數(shù)據(jù)庫版本。
準(zhǔn)備工作2:配置賬號權(quán)限
建議您提前規(guī)劃并創(chuàng)建一個(gè)專用于DataWorks訪問數(shù)據(jù)源的MariaDB賬號,操作如下。
可選:創(chuàng)建賬號。
操作詳情請參見創(chuàng)建MariaDB賬號。
配置權(quán)限。
在離線讀MariaDB數(shù)據(jù)時(shí),此賬號需擁有同步表的讀(SELECT)權(quán)限。
在離線寫MariaDB數(shù)據(jù)時(shí),此賬號需擁有同步表的寫(INSERT、DELETE、UPDATE)權(quán)限。
您可以參考以下命令為賬號添加權(quán)限,或直接給賬號賦予SUPER權(quán)限。如下執(zhí)行語句在實(shí)際使用時(shí),請?zhí)鎿Q'同步賬號'上述創(chuàng)建的賬號。
-- CREATE USER '同步賬號'@'%' IDENTIFIED BY '密碼'; //創(chuàng)建同步賬號并設(shè)置密碼,使其可以通過任意主機(jī)登錄數(shù)據(jù)庫。%表示任意主機(jī)。 GRANT SELECT, INSERT, DELETE,UPDATE CLIENT ON *.* TO '同步賬號'@'%'; //授權(quán)同步賬號數(shù)據(jù)庫的 SELECT, INSERT, DELETE,UPDATE 權(quán)限。
創(chuàng)建數(shù)據(jù)源
在進(jìn)行數(shù)據(jù)同步任務(wù)開發(fā)時(shí),您需要在DataWorks上創(chuàng)建一個(gè)對應(yīng)的數(shù)據(jù)源,操作流程請參見創(chuàng)建并管理數(shù)據(jù)源,詳細(xì)的配置參數(shù)解釋可在配置界面查看對應(yīng)參數(shù)的文案提示。
數(shù)據(jù)同步任務(wù)開發(fā)
數(shù)據(jù)同步任務(wù)的配置入口和通用配置流程可參見下文的配置指導(dǎo)。
單表離線同步任務(wù)配置指導(dǎo)
操作流程請參見通過腳本模式配置離線同步任務(wù)。
腳本模式配置的全量參數(shù)和腳本Demo請參見下文的附錄:MariaDB腳本Demo與參數(shù)說明。
附錄:MariaDB腳本Demo與參數(shù)說明
離線任務(wù)腳本配置方式
如果您配置離線任務(wù)時(shí)使用腳本模式的方式進(jìn)行配置,您需要按照統(tǒng)一的腳本格式要求,在任務(wù)腳本中編寫相應(yīng)的參數(shù),詳情請參見通過腳本模式配置離線同步任務(wù),以下為您介紹腳本模式下數(shù)據(jù)源的參數(shù)配置詳情。
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":"",//數(shù)據(jù)源。
"table":[//表名,即使只有一張表,也必須以[]的數(shù)組形式書寫。
"xxx"
]
}
],
"where":"",//過濾條件。
"splitPk":"",//切分鍵。
"encoding":"UTF-8"http://編碼格式。
},
"name":"Reader",
"category":"reader"
},
{
"stepType":"stream",
"parameter":{},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{
"record":"0"http://錯(cuò)誤記錄數(shù)。
},
"speed":{
"throttle":true,//當(dāng)throttle值為false時(shí),mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時(shí),表示限流。
"concurrent":1,//作業(yè)并發(fā)數(shù)。
"mbps":"12"http://限流,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Reader腳本參數(shù)
腳本參數(shù)名 | 描述 | 是否必選 | 默認(rèn)值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,此配置項(xiàng)填寫的內(nèi)容必須與添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表名稱,一個(gè)數(shù)據(jù)集成任務(wù)只能同步數(shù)據(jù)到一張目標(biāo)表。 table用于配置范圍的高級用法示例如下:
說明 任務(wù)會讀取匹配到的所有表,具體讀取這些表中column配置項(xiàng)指定的列。如果表不存在,或者讀取的列不存在,會導(dǎo)致任務(wù)失敗。 | 是 | 無 |
column | 所配置的表中需要同步的列名集合,使用JSON的數(shù)組描述字段信息 。默認(rèn)使用所有列配置,例如[ * ]。
| 是 | 無 |
splitPk | MariaDB Reader進(jìn)行數(shù)據(jù)抽取時(shí),如果指定splitPk,表示您希望使用splitPk代表的字段進(jìn)行數(shù)據(jù)分片,數(shù)據(jù)同步因此會啟動并發(fā)任務(wù)進(jìn)行數(shù)據(jù)同步,提高數(shù)據(jù)同步的效能。
| 否 | 無 |
where | 篩選條件,在實(shí)際業(yè)務(wù)場景中,往往會選擇當(dāng)天的數(shù)據(jù)進(jìn)行同步,將where條件指定為gmt_create>$bizdate。
| 否 | 無 |
querySql(高級模式,向?qū)J讲恢С执藚?shù)的配置) | 在部分業(yè)務(wù)場景中,where配置項(xiàng)不足以描述所篩選的條件,您可以通過該配置型來自定義篩選SQL。配置該項(xiàng)后,數(shù)據(jù)同步系統(tǒng)會忽略tables、columns和splitPk配置項(xiàng),直接使用該項(xiàng)配置的內(nèi)容對數(shù)據(jù)進(jìn)行篩選。 例如,需要進(jìn)行多表join后同步數(shù)據(jù),使用select a,b from table_a join table_b on table_a.id = table_b.id。當(dāng)您配置querySql時(shí),MariaDB Reader直接忽略table、column、where和splitPk條件的配置,querySql優(yōu)先級大于table、column、where和splitPk選項(xiàng)。datasource通過它解析出用戶名和密碼等信息。 說明 querySql需要區(qū)分大小寫,例如,寫為querysql會不生效。 | 否 | 無 |
Writer腳本Demo
{
"type":"job",
"version":"2.0",//版本號。
"steps":[
{
"stepType":"stream",
"parameter":{},
"name":"Reader",
"category":"reader"
},
{
"stepType":"mariadb",//插件名。
"parameter":{
"postSql":[],//導(dǎo)入后的準(zhǔn)備語句。
"datasource":"",//數(shù)據(jù)源。
"column":[//列名。
"id",
"value"
],
"writeMode":"insert",//寫入模式,您可以設(shè)置為insert、replace或update。
"batchSize":1024,//一次性批量提交的記錄數(shù)大小。
"table":"",//表名。
"preSql":[
"delete from XXX;" //導(dǎo)入前的準(zhǔn)備語句。
]
},
"name":"Writer",
"category":"writer"
}
],
"setting":{
"errorLimit":{//錯(cuò)誤記錄數(shù)。
"record":"0"
},
"speed":{
"throttle":true,//當(dāng)throttle值為false時(shí),mbps參數(shù)不生效,表示不限流;當(dāng)throttle值為true時(shí),表示限流。
"concurrent":1, //作業(yè)并發(fā)數(shù)。
"mbps":"12"http://限流,控制同步的最高速率,防止對上游/下游數(shù)據(jù)庫讀取/寫入壓力過大,此處1mbps = 1MB/s。
}
},
"order":{
"hops":[
{
"from":"Reader",
"to":"Writer"
}
]
}
}
Writer腳本參數(shù)
腳本參數(shù)名 | 描述 | 是否必選 | 默認(rèn)值 |
datasource | 數(shù)據(jù)源名稱,腳本模式支持添加數(shù)據(jù)源,此配置項(xiàng)填寫的內(nèi)容必須與添加的數(shù)據(jù)源名稱保持一致。 | 是 | 無 |
table | 選取的需要同步的表名稱。 | 是 | 無 |
writeMode | 選擇導(dǎo)入模式,支持insert into、on duplicate key update和replace into三種方式:
| 否 | insert into |
column | 目標(biāo)表需要寫入數(shù)據(jù)的字段,字段之間用英文所逗號分隔,例如"column": ["id", "name", "age"]。如果要依次寫入全部列,使用星號(*)表示, 例如"column": ["*"]。 | 是 | 無 |
preSql | 執(zhí)行數(shù)據(jù)同步任務(wù)之前率先執(zhí)行的SQL語句。目前向?qū)J絻H允許執(zhí)行一條SQL語句,腳本模式可以支持多條SQL語句。例如,執(zhí)行前清空表中的舊數(shù)據(jù)(truncate table tablename)。 說明 當(dāng)有多條SQL語句時(shí),不支持事務(wù)。 | 否 | 無 |
postSql | 執(zhí)行數(shù)據(jù)同步任務(wù)之后執(zhí)行的SQL語句,目前向?qū)J絻H允許執(zhí)行一條SQL語句,腳本模式可以支持多條SQL語句。例如,加上某一個(gè)時(shí)間戳alter table tablename add colname timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。 說明 當(dāng)有多條SQL語句時(shí),不支持事務(wù)。 | 否 | 無 |
batchSize | 一次性批量提交的記錄數(shù)大小,該值可以極大減少數(shù)據(jù)同步系統(tǒng)與MariaDB的網(wǎng)絡(luò)交互次數(shù),并提升整體吞吐量。如果該值設(shè)置過大,會導(dǎo)致數(shù)據(jù)同步運(yùn)行進(jìn)程OOM異常。 | 否 | 256 |
updateColumn | 當(dāng)writeMode配置成update時(shí),發(fā)生遇到主鍵/唯一性索引沖突時(shí)所更新的字段。字段之間用英文逗號所分隔,例如 "updateColumn":["name", "age"] 。 | 否 | 無 |