DTS支持調用API接口,配置或查詢DTS任務的遷移、同步或訂閱對象。本文將為您介紹相關API接口,并提供對象的定義和配置案例。
相關接口及參數
API | 說明 |
在請求參數 | |
在返回參數 |
遷移、同步或訂閱對象定義說明
遷移、同步或訂閱對象的數據類型為JSON,詳細定義如下:
若遷移、同步或訂閱對象包含多個庫,則您可參考如下定義:
重要訂閱實例不支持映射功能,即訂閱實例中
name
的參數值必須與待訂閱的數據庫或表的名稱一致。{ "待遷移、同步或訂閱的庫1的名稱": { "name": "遷移、同步或訂閱的庫1在目標實例中的名稱", "all": true(表示遷移、同步或訂閱對象為整庫) }, "待遷移、同步或訂閱的庫2的名稱": { "name": "遷移、同步或訂閱的庫2在目標實例中的名稱", "all": false(表示遷移、同步或訂閱對象為非整庫), "Table": { "待遷移、同步或訂閱的表A的名稱": { "name": "遷移、同步或訂閱的表A在目標實例中的名稱", "all": true(表示遷移、同步或訂閱對象為整表), "dml_op": "需增量遷移或同步的DML操作", "ddl_op": "需增量遷移或同步的DDL操作" } } }, "待遷移、同步或訂閱的庫3的名稱": { "name": "遷移、同步或訂閱的庫3在目標實例中的名稱", "all": true(表示遷移、同步或訂閱對象為整庫), "dml_op": "需增量遷移或同步的DML操作", "ddl_op": "需增量遷移或同步的DDL操作" } }
若遷移或同步對象的粒度為列,或者包含過濾條件,則您可參考如下定義:
{ "待遷移、同步或訂閱的庫名": { "name": "遷移、同步或訂閱的庫在目標實例中的庫名", "all": false(表示遷移、同步或訂閱對象為非整庫), "Table": { "待遷移、同步或訂閱的表名A": { "name": "遷移、同步或訂閱的表在目標實例中的表名A", "all": false(表示遷移、同步或訂閱對象為非整表), "filter": "id>10" "column": { "id": { "key": "PRI", "name": "id", "type": "int(11)", "sharedKey": false, "state": "checked" } }, "shard": 12 } } } }
若遷移或同步對象所屬的目標庫實例為云原生數據倉庫AnalyticDB MySQL版、AnalyticDB PostgreSQL版時,則您可參考如下定義:
{ "待遷移、同步的庫的名稱": { "name": "遷移、同步的庫在目標實例中的名稱", "all": false(固定為false。無論是對象為整庫還是表級,如目標實例為AnalyticDB MySQL或AnalyticDB PostgreSQL,固定傳入false,且還需傳入表對應的分區鍵等信息), "Table": { "待遷移、同步的表A的名稱": { "all": true(表示遷移、同步對象為整表), "name": "遷移、同步的表A在目標實例中的名稱", "primary_key": "id(指定主鍵)", "type": "dimension(表的類型)", } "待遷移、同步的表B的名稱": { "all": true(表示遷移、同步對象為整表), "name": "遷移、同步的表B在目標實例中的名稱", "part_key": "id(指定分區鍵)", "primary_key": "id(指定主鍵)", "type": "partition(表的類型)", "tagColumnValue": "標簽列的值" } } } }
若需要給同步對象設置獨立沖突修復策略,則您可參考如下定義:
說明當前僅MySQL間或PolarDB MySQL版集群間的雙向同步實例支持。
支持設置庫級別或表級別的獨立沖突修復策略。
設置了獨立沖突修復策略的列,全局沖突修復策略對其不生效。
表級別
{ "待同步的庫的名稱1": { "name": "待同步的庫1在目標實例中的名稱", "all": true(表示同步對象為整庫), "conflict": "任務級別的沖突修復策略" }, "待同步的庫的名稱2": { "name": "待同步的庫2在目標實例中的名稱", "all": false(表示同步對象為非整庫), "conflict": "overwrite", "Table": { "待同步的表A的名稱": { "name": "同步的表A在目標實例中的名稱", "all": true(表示同步對象為整表), "cdr_cmp_col": "沖突檢測列", "cdr_rslv_col": "沖突檢測列", "resolve_method": "表級別的沖突修復策略" } } } }
庫級別
同步對象為整庫:
"待同步的庫的名稱1": { "name": "待同步的庫1在目標實例中的名稱", "all": true(表示同步對象為整庫), "conflict": "任務級別的沖突修復策略", "cdr_cmp_col": "沖突檢測列", "cdr_rslv_col": "沖突檢測列", "resolve_method": "庫級別的沖突修復策略" } }
同步對象非整庫:
"待同步的庫的名稱2": { "name": "待同步的庫2在目標實例中的名稱", "all": false(表示同步對象為非整庫), "conflict": "任務級別的沖突修復策略", "cdr_cmp_col": "沖突檢測列", "cdr_rslv_col": "沖突檢測列", "resolve_method": "庫級別的沖突修復策略", "Table": { "待同步的表A的名稱": { "name": "同步的表A在目標實例中的名稱", "all": true(表示同步對象為整表) } } }
參數 | 說明 |
| 源庫、表、列名映射到目標庫、表、列的名稱。如源庫名為dtssource,目標庫名為dtstarget,則您需在name中傳入dtstarget,表示把源庫名映射成dtstarget后寫入目標庫中。 |
| 是否選擇全部表、列,取值:
|
| 待遷移、同步或訂閱的表信息。 |
| 設置過濾條件,過濾待遷移、同步或訂閱的數據。目前僅支持在表級別中體現。 例如您可傳入 說明 訂閱任務暫不支持設置過濾條件。 |
| 待遷移、同步或訂閱的列信息。 |
| 是否為主鍵,取值:
|
| 是否為分片鍵,取值:
說明 當遷移、同步對象所屬數據庫的類型為Kafka時,才需配置本參數。 |
| 該字段的數據類型。 |
| 如為 |
| 待遷移、同步的表的分片數量。 說明 當遷移、同步數據所屬數據庫的類型為Kafka時,才需配置本參數。 |
| 選擇增量遷移或同步的DML操作,取值及意思如下:
|
| 選擇增量遷移或同步的DDL操作。取值及意思如下:
|
| 表示主鍵。當目標實例為云原生數據倉庫AnalyticDB MySQL版、AnalyticDB PostgreSQL版時,本參數才可用且必須傳入。 |
| 表示分區鍵。當目標實例為云原生數據倉庫AnalyticDB MySQL版、AnalyticDB PostgreSQL版時,本參數才可用且必須傳入。 |
重要 此處的 | 當目標實例為云原生數據倉庫AnalyticDB MySQL版、AnalyticDB PostgreSQL版時,您需要指明遷移、同步對象的表類型:
|
| 自定義__dts_data_source標簽列的值。當目標實例為云原生數據倉庫AnalyticDB MySQL版時,本參數才可用且必須傳入。 |
| 任務級別的全局沖突修復策略,待同步的每個庫中都需傳入該參數,且取值必須一致。取值:
|
| 表級別的獨立沖突修復策略(僅增量同步支持),取值:
|
|
|
|
遷移、同步或訂閱對象配置示例
示例一:遷移、同步或訂閱dtstestdata庫中所有的表。
{"dtstestdata": { "name": "dtstestdata", "all": true }}
示例二:遷移或同步dtstestdata庫,并修改庫名為dtstestdata_new。
{"dtstestdata": { "name": "dtstestdata_new", "all": true }}
示例三:遷移、同步或訂閱dtstestdata庫中部分表(如customer)。
{"dtstestdata": { "name": "dtstestdata", "all": false, "Table": { "customer": { "name": "customer", "all": true, "column": { "id": { "key": "PRI", "name": "id", "type": "int(11)", "sharedKey": false, "state": "checked" }, "gmt_create": { "key": "", "name": "gmt_create", "type": "datetime", "sharedKey": false, "state": "checked" }, "gmt_modify": { "key": "", "name": "gmt_modify", "type": "datetime", "sharedKey": false, "state": "checked" }, "valid_time": { "key": "", "name": "valid_time", "type": "datetime", "sharedKey": false, "state": "checked" }, "creator": { "key": "", "name": "creator", "type": "varchar(200)", "sharedKey": false, "state": "checked" } }, "shard": 12 } } } }
示例四:遷移或同步dtstestdata庫中的表(如customer和order)的部分列。
{"dtstestdata": { "name": "dtstestdata", "all": false, "Table": { "customer": { "name": "customer", "all": false, "column": { "id": { "key": "PRI", "name": "id", "type": "int(11)", "sharedKey": false, "state": "checked" }, "level": { "key": "", "name": "level", "type": "varchar(5000)", "sharedKey": false, "state": "checked" }, "name": { "key": "", "name": "name", "type": "varchar(500)", "sharedKey": false, "state": "checked" }, }, "shard": 12 }, "order": { "name": "order", "all": false, "column": { "id": { "key": "PRI", "name": "id", "type": "int(11)", "sharedKey": false, "state": "checked" } }, "shard": 12 } } } }
示例五:遷移或同步dtstestdata庫中的表(如customer、order、commodity)至目標實例云原生數據倉庫AnalyticDB MySQL版、AnalyticDB PostgreSQL版中。
{ "dtstestdata": { "name": "dtstestdatanew", "all": false, "Table": { "order": { "name": "ordernew", "all": true, "part_key": "id", "primary_key": "id", "type": "partition" }, "customer": { "name": "customernew", "all": true, "primary_key": "id", "type": "dimension" }, "commodity": { "name": "commoditynew", "all": false, "filter": "id>10", "column": { "id": { "key": "PRI", "name": "id", "type": "int(11)" } }, "part_key": "id", "primary_key": "id", "type": "partition" } } } }
示例六:
表級別
給同步任務的對象設置全局沖突修復策略
interrupt
;給同步的dtstestdata2庫中的customer表的主鍵列、唯一鍵列和name
列設置獨立沖突修復策略overwrite
。{ "dtstestdata1": { "name": "dtstestdata1", "all": true, "conflict": "interrupt" }, "dtstestdata2": { "name": "dtstestdata2", "all": false, "conflict": "interrupt", "Table": { "customer": { "name": "customer", "all": true, "cdr_cmp_col": "name", "cdr_rslv_col": "name", "resolve_method": "overwrite" } } } }
庫級別
同步對象為整庫:給同步的dtstestdata1庫中所有待同步表的
name
和addr
列,設置獨立沖突修復策略use_max
。"dtstestdata1": { "name": "dtstestdata1", "all": true, "conflict": "overwrite", "cdr_cmp_col": "name,addr", "cdr_rslv_col": "name,addr", "resolve_method": "use_max" } }
同步對象非整庫:給同步的dtstestdata2庫中所有待同步表的
name
和addr
列,設置獨立沖突修復策略use_max
。"dtstestdata2": { "name": "dtstestdata2", "all": false, "conflict": "overwrite", "cdr_cmp_col": "name,addr", "cdr_rslv_col": "name,addr", "resolve_method": "use_max", "Table": { "person": { "name": "person", "all": true }, "class": { "name": "class", "all": true } } }
示例七:源數據庫類型為Tair/Redis的同步實例,對名稱為0和1的DB,僅同步Key前綴為
HProp
的數據(即需要同步的前綴為HProp
);對名稱為2的DB僅同步Key前綴為dts
且不包含dtstest
的數據(即需要同步的前綴為dts
,且需要過濾的前綴為dtstest
)。{ "0": { "name": "0", "all": true, "filter": "[{"condition":"HProp","filterType":"white","filterPattern":"prefix"}]" }, "1": { "name": "1", "all": true, "filter": "[{"condition":"HProp","filterType":"white","filterPattern":"prefix"}]" }, "2": { "name": "2", "all": true, "filter": "[{"condition":"dts","filterType":"white","filterPattern":"prefix"},{"condition":"dtstest","filterType":"black","filterPattern":"prefix"}]" } }