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 规则类型创建表映射规则。

选择规则和操作

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

参数 可能的值 描述
rule-type selection 在指定表映射时,您必须具有至少一个选择规则。
rule-id 一个数字值。 一个用于标识规则的唯一数字值。
rule-name 一个字母数字值。 一个用于标识规则的唯一名称。
rule-action includeexclude 包括或排除规则所选定的对象。
load-order 一个正整数。最大值为 2147483647。 指示加载表的优先级。首先加载具有较高值的表。

例 迁移架构中的所有表

以下示例将所有表从源中名为 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" } ] }

例 迁移架构中的所有表

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

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

例 按设定顺序迁移表

以下示例迁移两个表。表 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表的名称。可以使用“%”百分号作为通配符。

规则应用于的架构和表。
rule-action
  • rename

  • remove-column

  • convert-lowercaseconvert-uppercase

  • add-prefixremove-prefixreplace-prefix

  • add-suffixremove-suffixreplace-suffix

要应用于对象的转换。所有转换规则操作都区分大小写。
rule-target schematablecolumn 要转换的对象的类型。
value 一个字母数字值,该值遵循目标类型的命名规则。 需要输入的操作的新值,例如 rename
old-value 一个字母数字值,该值遵循目标类型的命名规则。 需要替换的操作的旧值,例如 replace-prefix
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" } ] }

例 删除列

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

例 为表分段以进行加载

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

{ "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' 时应用。

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

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

按时间和日期筛选

在选择要导入的数据时,可以指定一个日期或时间作为筛选条件的一部分。AWS DMS 将日期格式 YYYY-MM-DD 和时间格式 YYYY-MM-DD HH:MM:SS 用于筛选。AWS DMS 比较函数遵循 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" }] }] }] }

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

可以通过指定列名、筛选条件、筛选运算符和筛选值来创建源筛选器。

下表显示了用于源筛选的参数。

参数

filter-type

source

column-name

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

filter-conditions

filter-operator

该参数可以是下列项之一:

  • ste – 小于或等于

  • gte – 大于或等于

  • eq – 等于

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

filter-operator 参数的值。如果 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" }] }] }] }