AWS Database Migration Service
用户指南 (版本 API Version 2016-01-01)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用表映射指定任务设置

表映射使用多个类型的规则来指定数据源、源架构、数据以及任务期间将发生的任何转换。可以使用表映射指定数据库中要迁移的单个表和要用于迁移的架构。此外,还可以使用筛选器指定给定表列中要复制的数据。可使用转换修改写入目标数据库中的数据。

通过控制台按表映射指定表选择和转换

可以使用 AWS 管理控制台执行表映射,包括指定表选择和转换。在控制台上,您可以使用 Where (位置) 部分指定架构、表和操作(包括或排除)。使用 Filter (筛选器) 部分指定表中的列名称以及要应用于复制任务的条件。这两个操作共同创建选择规则。

在指定至少一个选择规则后,可以在表映射中包含转换。可以使用转换重命名架构或表,为架构或表添加前缀或后缀,或者删除表列。

以下示例演示如何在名为 EntertainmentAgencySample 的架构中为名为 Customers 的表设置选择规则。在 Guided (指导) 选项卡上创建选择规则和转换。此选项卡仅当您具有带架构和表信息的源终端节点时显示。

使用 AWS 控制台指定表选择、筛选条件和转换

  1. 登录 AWS 管理控制台并选择 AWS DMS。如果以 AWS Identity and Access Management (IAM) 用户身份登录,则必须具有 AWS DMS 的相应访问权限。有关所需权限的更多信息,请参阅使用 AWS DMS 所需的 IAM 权限

  2. 控制面板页中,选择任务

  3. 选择创建任务

  4. 输入任务信息,包括任务名称复制实例源终端节点目标终端节点迁移类型。从 Table mappings (表映射) 部分中选择 Guided (指导)

    
                                架构和表选择
  5. Table mapping (表映射) 部分中,选择架构名称和表名称。在指定表名称时,可以使用“%”作为通配符值。指定包括或排除由筛选器定义的数据所需执行的操作。

    
                                架构和表选择
  6. 使用添加列筛选器添加条件链接指定筛选器信息。

    1. 选择添加列筛选器以指定列和条件。

    2. 选择添加条件以添加其他条件。

    以下示例介绍 Customers 表的筛选器,包含介于 0185 之间的 AgencyIDs

    
                                架构和表选择
  7. 在创建所需的选择后,选择 Add selection rule (添加选择规则)

  8. 创建至少一个选择规则后,可以向任务添加转换。选择 add transformation rule (添加转换规则)

    
                                转换规则
  9. 选择要转换的目标,然后输入请求的其他信息。以下示例介绍从 Customer 表中删除 AgencyStatus 列的转换。

    
                                转换规则
  10. 选择添加转换规则

  11. (可选)通过选择 add selection rule (添加选择规则)add transformation rule (添加转换规则) 来添加其他选择规则或转换。完成后,选择创建任务

    
                                转换规则

使用 JSON 按表映射指定表选择和转换

您可以创建 JSON 格式的表映射。如果创建一个使用 AWS DMS 管理控制台的迁移任务,则可直接在表映射框中输入 JSON。如果您使用 CLI 或 API 执行迁移,则可创建一个 JSON 文件来指定要在迁移期间应用的表映射。

可以指定要使用的表或架构,并且可以执行架构和表转换。可使用 selectiontransformation 规则类型创建表映射规则。

注意

对于 Amazon S3 目标,您也可以使用 post-processing 规则类型和 add-tag 规则操作来标记映射到选定表和架构的 S3 对象。有关更多信息,请参阅Amazon S3 对象标签

选择规则和操作

通过使用表映射,可通过选择规则和操作来指定要使用的表或架构。对于使用选择规则类型的表映射规则,可应用以下值。

参数 可能的值 描述
rule-type selection 在指定表映射时定义至少一个选择规则。
rule-id 一个数字值。 一个用于标识规则的唯一数字值。
rule-name 一个字母数字值。 一个用于标识规则的唯一名称。
rule-action includeexcludeexplicit 包括或排除规则所选定的对象。如果指定 explicit,则可以选择并仅包含一个对应于显式指定的表和架构的对象。
object-locator 一个带以下参数的对象:
  • schema-name – 架构的名称。

  • table-name – 表的名称。

规则应用于的每个架构和表的名称。如果 rule-actionincludeexclude,您可以使用“%”百分比符号作为每个 object-locator 参数的值的全部或部分的通配符。因此,您可以匹配这些项目:

  • 单个架构中的单个表

  • 部分或全部架构中的单个表

  • 单个架构中的部分或全部表

  • 部分或全部架构中的部分或全部表

如果 rule-actionexplicit,则只能指定单个表和架构的确切名称(不带通配符)。

load-order 一个正整数。最大值为 2147483647。 指示加载表的优先级。首先加载具有较高值的表。
filters 对象数组。 一个或多个用于筛选源的对象。您指定要在源中的单个列上筛选的对象参数。您指定要在多个列上筛选的多个对象。有关更多信息,请参阅使用源筛选器

例 迁移架构中的所有表

以下示例将所有表从源中名为 Test 的架构中迁移到目标终端节点。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" } ] }

例 迁移架构中的一些表

以下示例将所有表(以 DMS 开头的表除外)从源中名为 Test 的架构中迁移到目标终端节点。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "selection", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "Test", "table-name": "DMS%" }, "rule-action": "exclude" } ] }

例 在单个架构中迁移指定的单个表

以下示例将源中 NewCust 架构中的 Customer 表迁移到目标终端节点。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "NewCust", "table-name": "Customer" }, "rule-action": "explicit" } ] }

注意

您可以通过指定多个选择规则在多个表和架构上显式选择。

例 按设定顺序迁移表

以下示例迁移两个表。表 loadfirst(优先级为 2)在表 loadsecond 之前迁移。

{ "rules": [ { "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "Test", "table-name": "loadfirst" }, "rule-action": "include", "load-order": "2" }, { "rule-type": "selection", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "Test", "table-name": "loadsecond" }, "rule-action": "include", "load-order": "1" } ] }

转换规则和操作

可使用转换操作指定要应用于所选架构或表的任何转换。转换规则是可选的。

对于使用转换规则类型的表映射规则,可应用以下值。

参数 可能的值 描述
rule-type transformationtable-settings 一个将规则应用于选择规则所指定的对象的值。
rule-id 一个数字值。 一个用于标识规则的唯一数字值。
rule-name 一个字母数字值。 一个用于标识规则的唯一名称。
object-locator 一个带以下参数的对象:
  • schema-name – 架构的名称。

  • table-name – 表的名称。

  • table-tablespace-name – 现有表表空间的名称。

  • index-tablespace-name – 现有索引表空间的名称。

规则应用于的每个架构、表、表表空间和索引表空间的名称。您可以使用“%”百分比符号作为每个 object-locator 参数的值的全部或部分的通配符。因此,您可以匹配这些项目:

  • 单个架构中的单个表

  • 部分或全部架构中的单个表

  • 单个架构中的部分或全部表

  • 部分或全部架构中的部分或全部表

此外,table-tablespace-nameindex-tablespace-name 参数仅可用于匹配 Oracle 源终端节点。您可以在单个规则中指定 table-tablespace-nameindex-tablespace-name,但不能同时指定两者。因此,您可以匹配以下任一 项:

  • 一个、部分或所有表表空间

  • 一个、部分或所有索引表空间

rule-action
  • rename

  • remove-column

  • convert-lowercaseconvert-uppercase

  • add-prefixremove-prefixreplace-prefix

  • add-suffixremove-suffixreplace-suffix

  • define-primary-key

要应用于对象的转换。所有转换规则操作都区分大小写。
rule-target schematablecolumntable-tablespaceindex-tablespace 要转换的对象的类型。

table-tablespaceindex-tablespace 值仅可用于 Oracle 目标终端节点。另外,指定与您在 object-locator 中指定的相应参数匹配的值:table-tablespace-nameindex-tablespace-name

value 一个字母数字值,该值遵循目标类型的命名规则。 需要输入的操作的新值,例如 rename
old-value 一个字母数字值,该值遵循目标类型的命名规则。 需要替换的操作的旧值,例如 replace-prefix
primary-key-def 一个带以下参数的对象:
  • name – 表的新主键或唯一索引的名称。

  • (可选)origin – 要定义的唯一键的类型:primary-key(默认值)或 unique-index

  • columns – 一个字符串数组,它按照列在主键或唯一索引中出现的顺序列出列的名称。

在规则操作设置为 define-primary-key 且规则目标设置为 table 的情况下,此参数定义转换表上唯一键的名称、类型和内容。默认情况下,将唯一键定义为主键。
parallel-load
  • partitions-auto

  • subpartitions-auto

  • none

确定如何在加载时为表分段的值。您可以按分区或子分区为表分段。

例 重命名架构

以下示例将架构从 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" } ] }

例 删除列

以下示例将转换源中名为 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" ] } }] }

例 为表分段以进行加载

以下示例为源中的表分段以更高效地上传或卸载表。

{ "rules": [{ "rule-type": "table-settings", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "table1" }, "parallel-load": { "type": "partitions-auto" } }] }

使用源筛选器

您可以使用源筛选器来限制从源传输到目标的记录的数量和类型。例如,您可以指定仅将总部员工移动到目标数据库。筛选器是选择规则的一部分。还可以对数据列应用筛选器。

源筛选器必须遵循以下约束:

  • 选择规则可以不包含筛选器,也可以包含一个或多个筛选器。

  • 每个筛选器可具有一个或多个筛选条件。

  • 如果使用多个筛选器,则将合并一系列筛选器,就像在筛选器之间使用 AND 运算符一样。

  • 如果在单个筛选器中使用多个筛选条件,则将合并一系列筛选条件,就像在筛选条件之间使用 OR 运算符一样。

  • 筛选器仅在 rule-action = 'include' 时应用。

  • 筛选器需要一个列名和一系列筛选条件。筛选条件必须具有一个筛选运算符和一个值。

  • 列名、表名和架构名都区分大小写。

使用 JSON 格式创建源筛选器规则

您可以使用选择规则的 JSON filters 参数创建源筛选器。filters 参数指定包含一个或多个 JSON 对象的数组。每个对象都具有用于指定源筛选类型、列名称和筛选条件的参数。这些筛选条件包含一个或多个筛选运算符和筛选值。

下表显示了用于在 filters 对象中指定源筛选的参数。

参数

filter-type

source

column-name

要将筛选器应用于的源列的名称。该名称区分大小写。

filter-conditions

一个包含一个或多个对象的数组,其中包含一个 filter-operator 参数和一个相应的值参数,具体取决于 filter-operator 值。

filter-operator

此参数可能具有下列值之一:

  • ste – 小于或等于

  • gte – 大于或等于

  • eq – 等于

  • between – 等于或在 2 个值之间

value

start-value

end-value

filter-operator参数的值。如果 filter-operator 具有 between 之外的值,请使用 value。如果 filter-operator 设置为 between,则提供两个值,一个用于 start-value,另一个用于 end-value

以下示例说明了几种常见的使用源筛选器的方法。

例 单一筛选器

以下筛选器将 empid >= 100 的所有员工复制到目标数据库中。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "gte", "value": "100" }] }] }] }

例 多个筛选运算符

以下筛选器将多个筛选运算符应用于单个数据列。筛选器将 (empid <=10) OR (empid is between 50 and 75) OR (empid >= 100) 的所有员工复制到目标数据库中。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "ste", "value": "10" }, { "filter-operator": "between", "start-value": "50", "end-value": "75" }, { "filter-operator": "gte", "value": "100" }] }] }] }

例 多个筛选器

以下筛选器将多个筛选条件应用于表中的两个列。筛选器将 (empid <= 100) AND (dept= tech) 的所有员工复制到目标数据库中。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empid", "filter-conditions": [{ "filter-operator": "ste", "value": "100" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "eq", "value": "tech" }] }] }] }

按时间和日期筛选

在选择要导入的数据时,可以指定一个日期或时间作为筛选条件的一部分。AWS DMS 将日期格式 YYYY-MM-DD 和时间格式 YYYY-MM-DD HH:MM:SS 用于筛选。AWS DMS 比较函数遵循 SQLite 惯例。有关 SQLite 数据类型和日期比较的更多信息,请参阅 SQLite 文档中的 SQLite 版本 3 中的数据类型

以下示例说明如何基于日期进行筛选。它会将所有 empstartdate >= January 1, 2002 的员工复制到目标数据库。

例 单一日期筛选器

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "test", "table-name": "employee" }, "rule-action": "include", "filters": [{ "filter-type": "source", "column-name": "empstartdate", "filter-conditions": [{ "filter-operator": "gte", "value": "2002-01-01" }] }] }] }