本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
可使用转换操作指定要应用于所选架构、表或视图的任何转换。转换规则是可选的。
限制
不能对同一个对象(架构、表、列、表表空间或索引表空间)应用多个转换规则操作。只要每个转换操作应用于不同的对象,那么可以在任何级别应用多个转换规则操作。但是,当使用数据屏蔽转换规则时,此限制不适用,在这种规则中,您可以对同一列进行其他转换,例如
ADD-COLUMN
或CHANGE-DATA-TYPE
对同一列进行其他转换。转换规则中的表名称和列名称是区分大小写的。例如,Oracle 或 Db2 数据库的表名称和列名称必须以大写形式提供。
不支持使用 Right-to-Left语言的列名进行转换。
对于名称中包含特殊字符(如 #、\、/、-)的列,无法执行转换。
对于映射到BLOB/CLOB数据类型的列,唯一支持的转换是将该列放在目标上。
AWS DMS 不支持将两个源表复制到单个目标表。 AWS DMS 根据复制任务的转换规则,将记录从一个表复制到另一个表以及从一个列复制到另一个列。对象名称必须唯一,以防止重叠。
例如,源表包含名为
ID
的列,而对应的目标表预先存在名为id
的列。如果规则使用ADD-COLUMN
语句添加名为的新列id
,并使用SQLite语句在列中填充自定义值,则会创建一个名为但不支持的重复的id
、模棱两可的对象。创建转换规则时,建议仅在选择规则指定多列时(例如,当您将
column-name
设置为%
时)才使用data-type
参数。建议不要使用data-type
选择单列。
值
对于使用转换规则类型的表映射规则,可应用以下值。
参数 | 可能的值 | 描述 |
---|---|---|
rule-type |
transformation |
一个将规则应用于选择规则所指定的每个对象的值。使用 transformation (除非另有说明)。 |
rule-id |
一个数字值。 | 一个用于标识规则的唯一数字值。如果您为同一个对象(架构、表、列、表间空间或索引表空间)指定多个转换规则,则使用较低的规则 ID AWS DMS 应用转换规则。 |
rule-name |
一个字母数字值。 | 一个用于标识规则的唯一名称。 |
object-locator |
一个带以下参数的对象:
|
规则应用于的每个架构、表或视图、表的表空间、索引表空间和列的名称。您可以使用“%”百分比符号作为每个
此外,
|
rule-action |
|
要应用于对象的转换。所有转换规则操作都区分大小写。
与
如果 对于现有任务,更改目标表架构的转换规则操作(例如
|
rule-target |
schema , table ,
column , table-tablespace ,
index-tablespace |
要转换的对象类型。
请确保为指定作为 |
value |
一个字母数字值,该值遵循目标类型的命名规则。 | 需要输入的操作的新值,例如 rename 。 |
old-value |
一个字母数字值,该值遵循目标类型的命名规则。 | 需要替换的操作的旧值,例如 replace-prefix 。 |
data-type |
或者为替换数据类型的名称(如果 AWS DMS 支持以下数据类型的列DMS数据类型转换:
|
以下是指定要替换的现有数据类型的
在这里, |
expression |
遵循SQLite语法的字母数字值。 |
当与 当与 请注意,此参数仅支持表达式。不支持运算符和命令。 有关将表达式用于转换规则的更多信息,请参阅使用转换规则表达式定义列内容。 有关SQLite表达式的更多信息,请参阅使用SQLite函数构建表达式。 |
primary-key-def |
一个带以下参数的对象:
|
此参数可以定义转换的表或视图上唯一键的名称、类型和内容。当 rule-action 设置为 define-primary-key 并且 rule-target 设置 table 为时,它执行此操作。默认情况下,将唯一键定义为主键。 |
before-image-def |
一个带以下参数的对象:
|
此参数定义一个命名约定以标识之前映像列,并指定一个筛选器以确定哪些源列可能在目标上具有为它们创建的之前映像列。当 不要同时将 对于
有关 AWS DMS 目标端点的 before-image 支持的更多信息,请参阅: |
示例
例 重命名架构
以下示例将架构从 Test
(源中)重命名为 Test1
(目标中)。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "Test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "rename",
"rule-target": "schema",
"object-locator": {
"schema-name": "Test"
},
"value": "Test1"
}
]
}
例 重命名表
以下示例将表从 Actor
(源中)重命名为 Actor1
(目标中)。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "Test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "rename",
"rule-target": "table",
"object-locator": {
"schema-name": "Test",
"table-name": "Actor"
},
"value": "Actor1"
}
]
}
例 重命名列
以下示例将列从 first_name
中的表 Actor
(源中)重命名为 fname
(目标中)。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "4",
"rule-name": "4",
"rule-action": "rename",
"rule-target": "column",
"object-locator": {
"schema-name": "test",
"table-name": "Actor",
"column-name" : "first_name"
},
"value": "fname"
}
]
}
例 重命名 Oracle 表表空间
以下示例将 Oracle 源中名为 Actor
的表的名为 SetSpace
的表空间重命名为 Oracle 目标端点中的 SceneTblSpace
。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "Play",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "rename",
"rule-target": "table-tablespace",
"object-locator": {
"schema-name": "Play",
"table-name": "Actor",
"table-tablespace-name": "SetSpace"
},
"value": "SceneTblSpace"
}
]
}
例 重命名 Oracle 索引表空间
以下示例将 Oracle 源中名为 Actor
的表的名为 SetISpace
的索引表空间重命名为 Oracle 目标端点中的 SceneIdxSpace
。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "Play",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "rename",
"rule-target": "table-tablespace",
"object-locator": {
"schema-name": "Play",
"table-name": "Actor",
"table-tablespace-name": "SetISpace"
},
"value": "SceneIdxSpace"
}
]
}
例 添加列
以下示例将 datetime
列添加到架构 test
的表 Actor
中。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "add-column",
"rule-target": "column",
"object-locator": {
"schema-name": "test",
"table-name": "actor"
},
"value": "last_updated",
"data-type": {
"type": "datetime",
"precision": 6
}
}
]
}
例 删除列
以下示例将转换源中名为 Actor
的表,以从目标中删除以字符 col
开头的所有列。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
}, {
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "remove-column",
"rule-target": "column",
"object-locator": {
"schema-name": "test",
"table-name": "Actor",
"column-name": "col%"
}
}]
}
例 转换为小写形式
以下示例将表名从 ACTOR
(源中)转换为 actor
(目标中)。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
}, {
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "convert-lowercase",
"rule-target": "table",
"object-locator": {
"schema-name": "test",
"table-name": "ACTOR"
}
}]
}
例 转换为大写形式
以下示例将所有表和所有架构的所有列从小写形式(源中)转换为大写形式(目标中)。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "convert-uppercase",
"rule-target": "column",
"object-locator": {
"schema-name": "%",
"table-name": "%",
"column-name": "%"
}
}
]
}
例 添加前缀
以下示例转换源中的所有表,以便在目标中向这些表添加前缀 DMS_
。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
}, {
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "add-prefix",
"rule-target": "table",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"value": "DMS_"
}]
}
例 替换前缀
以下示例将转换源中包含前缀 Pre_
的所有列,以在目标中将前缀替换为 NewPre_
。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "replace-prefix",
"rule-target": "column",
"object-locator": {
"schema-name": "%",
"table-name": "%",
"column-name": "%"
},
"value": "NewPre_",
"old-value": "Pre_"
}
]
}
例 删除后缀
以下示例转换源中的所有表,以从目标中删除这些表的后缀 _DMS
。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"rule-action": "include"
}, {
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "remove-suffix",
"rule-target": "table",
"object-locator": {
"schema-name": "test",
"table-name": "%"
},
"value": "_DMS"
}]
}
例 定义主键
以下示例在迁移到目标端点的 ITEM
表的三个列上定义一个名为 ITEM-primary-key
的主键。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "inventory",
"table-name": "%"
},
"rule-action": "include"
}, {
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "define-primary-key",
"rule-target": "table",
"object-locator": {
"schema-name": "inventory",
"table-name": "ITEM"
},
"primary-key-def": {
"name": "ITEM-primary-key",
"columns": [
"ITEM-NAME",
"BOM-MODEL-NUM",
"BOM-PART-NUM"
]
}
}]
}
例 定义唯一索引
以下示例在迁移到目标端点的 ITEM
表的三个列上定义一个名为 ITEM-unique-idx
的唯一索引。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "inventory",
"table-name": "%"
},
"rule-action": "include"
}, {
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-action": "define-primary-key",
"rule-target": "table",
"object-locator": {
"schema-name": "inventory",
"table-name": "ITEM"
},
"primary-key-def": {
"name": "ITEM-unique-idx",
"origin": "unique-index",
"columns": [
"ITEM-NAME",
"BOM-MODEL-NUM",
"BOM-PART-NUM"
]
}
}]
}
例 更改目标列的数据类型
以下示例将名为 SALE_AMOUNT
的目标列的数据类型从现有数据类型更改为 int8
。
{
"rule-type": "transformation",
"rule-id": "1",
"rule-name": "RuleName 1",
"rule-action": "change-data-type",
"rule-target": "column",
"object-locator": {
"schema-name": "dbo",
"table-name": "dms",
"column-name": "SALE_AMOUNT"
},
"data-type": {
"type": "int8"
}
}
例 添加之前映像列
对于名为 emp_no
的源列,下面示例中的转换规则会在目标中添加名为 BI_emp_no
的新列。
{
"rules": [{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "%",
"table-name": "%"
},
"rule-action": "include"
},
{
"rule-type": "transformation",
"rule-id": "2",
"rule-name": "2",
"rule-target": "column",
"object-locator": {
"schema-name": "%",
"table-name": "employees"
},
"rule-action": "add-before-image-columns",
"before-image-def": {
"column-prefix": "BI_",
"column-suffix": "",
"column-filter": "pk-only"
}
}
]
}
在此,下面的语句用 1 填充相应行中的 BI_emp_no
列。
UPDATE employees SET emp_no = 3 WHERE BI_emp_no = 1;
在向支持的 AWS DMS 目标写入CDC更新时,该BI_emp_no
列可以分辨出emp_no
列中哪些行具有更新的值。