使用表映射指定任务设置 - AWS Database Migration Service
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

使用表映射指定任务设置

表映射使用多个类型的规则来指定数据源、源架构、数据以及任务期间将发生的任何转换。可以使用表映射指定数据库中要迁移的单个表和要用于迁移的架构。

使用表映射时,可以使用筛选器指定要从表列复制的数据。此外,您还可以使用转换来修改选定的架构、表或视图,然后再将其写入目标数据库。

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

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

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

以下过程演示了如何根据名为 EntertainmentAgencySample 的架构中名为 Customers 的表来设置选择规则。

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

  1. 登录 AWS 管理控制台并通过以下网址打开 AWS DMS 控制台:https://console.amazonaws.cn/dms/v2/

    如果以 AWS Identity and Access Management (IAM) 用户身份登录,请确保具有适当的 AWS DMS 访问权限。有关所需权限的更多信息,请参阅使用 AWS DMS 所需的 IAM 权限

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

  3. 选择创建任务

  4. 输入任务信息,包括任务名称复制实例源终端节点目标终端节点迁移类型。选择 引导 来自 表格映射 第节。

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

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

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

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

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

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

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

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

    
                            转换规则
  10. 选择 add transformation rule (添加转换规则)

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

    
                            转换规则

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

要指定在迁移过程中要应用的表映射,可以创建 JSON 文件。如果使用控制台创建迁移任务,则可浏览此 JSON 文件或在表映射框中直接输入 JSON。如果使用 CLI 或 API 执行迁移,那么可以使用 CreateReplicationTaskModifyReplicationTask API 操作的 TableMappings 参数指定此文件。

您可以指定要处理哪些表、视图和架构。您还可以执行表、视图和架构转换,并指定 AWS DMS 如何加载单独的表和视图。您使用以下规则类型为这些选项创建表映射规则:

  • selection 规则 – 确定要加载的源表、视图和架构的类型及名称。有关更多信息,请参阅 选择规则和操作。)

  • transformation 规则 – 指定在加载到目标上之前,对源上的特定源表和架构的更改及添加。有关更多信息,请参阅 转换规则和操作。)

    此外,要定义新列和现有列的内容,可以在转换规则中使用表达式。有关更多信息,请参阅 使用转换规则表达式定义列内容。)

  • table-settings 规则 – 指定 DMS 任务如何为单独的表加载数据。有关更多信息,请参阅 表设置规则和操作。)

注意

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

对于以下目标,您可以使用 object-mapping 规则类型:

选择规则和操作

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

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

  • table-name – 表的名称。

  • (可选)table-typetable | view | all,用于指示 table-name 仅引用表或视图还是引用表和视图。默认值为“table”。

    AWS DMS 仅在完全加载任务中加载视图。如果您只有完全加载任务和更改数据捕获 (CDC) 任务,请至少配置一个仅完全加载任务来加载您的视图。

规则应用于的每个架构和表或视图的名称。您还可以指定某个规则只包含表、只包含视图还是同时包含表和视图。如果 rule-actionincludeexclude,您可以使用“%”百分比符号作为 schema-nametable-name 参数的值的全部或部分的通配符。因此,您可以匹配这些项目:

  • 单个架构中的单个表或视图

  • 部分或所有架构中的单个表或视图

  • 单个架构中的部分或所有表和视图

  • 部分或全部架构中的部分或全部表和视图

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

支持的视图的源包括:
  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL/

  • IBM Db2 LUW

  • SAP Adaptive Server Enterprise (ASE)

注意

AWS DMS 从不将源视图加载到目标视图。源视图加载到目标上等同的表,具有与源上视图的相同名称。

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" } ] }

例 迁移架构中的部分视图

以下示例将部分视图从源中名为 Test 的架构迁移到目标中等同的表。

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

例 迁移架构中的所有表和视图

以下示例将所有表和视图从源中名为 report 的架构迁移到目标中等同的表。

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

转换规则和操作

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

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

参数: 可能的值 Description
rule-type transformation 一个将规则应用于选择规则所指定的每个对象的值。使用 transformation(除非另有说明)。
rule-id 一个数字值。 一个用于标识规则的唯一数字值。
rule-name 一个字母数字值。 一个用于标识规则的唯一名称。
object-locator 一个带以下参数的对象:
  • schema-name – 架构的名称。

  • table-name – 表或视图的名称。

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

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

  • column-name – 现有列的名称。

  • data-type – 现有列数据类型的名称。

规则应用于的每个架构、表或视图、表的表空间、索引表空间和列的名称。您可以将“%”百分号用作每个值全部或部分的 object-locator 参数,除了 data-type。因此,您可以匹配以下项目:

  • 单个架构中的单个表或视图

  • 部分或所有架构中的单个表或视图

  • 单个架构中的部分或所有表和视图

  • 部分或全部架构中的部分或全部表和视图

  • 指定的一个或多个表、一个或多个视图以及一个或多个架构中的一个或多个列。

  • 指定多个列时,具有给定 data-type 的列。有关 data-type 的可能值,请参阅下表中说明的 data-type

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

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

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

rule-action

add-column, remove-column

rename

convert-lowercase, convert-uppercase

add-prefix, remove-prefix, replace-prefix

add-suffix, remove-suffix, replace-suffix

define-primary-key

change-data-type

add-before-image-columns

要应用于对象的转换。所有转换规则操作都区分大小写。

rule-action 参数的 add-column 值会将列添加到表中。与 expressiondata-type 参数结合使用时,add-column 指定新列数据的值。

rule-actionchange-data-type 值仅适用于 column 规则目标。

rule-target schema, table, column, table-tablespace, index-tablespace 要转换的对象类型。

table-tablespaceindex-tablespace 值仅适用于 Oracle 目标终端节点。

确保为参数指定值,并将其作为 object-locator: table-tablespace-nameindex-tablespace-name 名称。

value 一个字母数字值,该值遵循目标类型的命名规则。 需要输入的操作的新值,例如 rename
old-value 一个字母数字值,该值遵循目标类型的命名规则。 需要替换的操作的旧值,例如 replace-prefix
data-type

type – 如果 rule-actionadd-column,则为要使用的数据类型;如果 rule-actionchange-data-type,则为替换数据类型。

或者为替换数据类型的名称(如果 rule-actionchange-data-typecolumn-name 的值为 "%"),并且,用于标识现有数据类型的附加 data-type 参数包括在 object-locator 中。

AWS DMS 支持以下 DMS 数据类型的列数据类型转换:"bytes", "date", "time", "datetime", "int1", "int2", "int4", "int8", "numeric", "real4", "real8", "string", "uint1", "uint2", "uint4", "uint8", "wstrin, "blob", "nclob", "clob", "boolean", "set", "list" "map", "tuple"

precision – 如果添加的列或替换数据类型具有精度,则为指定精度的整数值。

length – 新列数据的长度(与 add-column 结合使用时)

以下是指定要替换的现有数据类型的 data-type 参数的示例。当 column-name 的值为 "%" 时,该现有参数 data-type 包括在 object-locator 中,如下所示。

. . . "object-locator": { "schema-name": "dbo", "table-name": "dms", "column-name": "%", "data-type": "int2" }, "data-type": { "type": "int8" }

此处,任何具有 int2 数据类型的列都将替换为 int8 数据类型。

data-typelength 值仅适用于 add-column 规则操作的 column 规则目标。

expression 遵循 SQLite 语法的字母数字值。

当与 rule-action 设置为 rename-schema 结合使用时,expression 参数指定一个新的架构。当与 rule-action 设置为 rename-table 结合使用时,expression 指定一个新表。当与 rule-action 设置为 rename-column 结合使用时,expression 指定一个新的列名值。

当与 rule-action 设置为 add-column 结合使用时,expression 指定构成新列的数据。

有关将表达式用于转换规则的更多信息,请参阅 使用转换规则表达式定义列内容

primary-key-def 一个带以下参数的对象:
  • name – 表或视图的新主键或唯一索引的名称。

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

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

此参数可以定义转换的表或视图上唯一键的名称、类型和内容。当 rule-action 设置为 define-primary-key 以及 rule-target 设置为 table。默认情况下,唯一键被定义为主键。
before-image-def 一个带以下参数的对象:
  • column-prefix – 附加到列名称前面的值。默认值为 BI_

  • column-suffix – 附加到列名称后面的值。默认值为空。

  • column-filter – 需要以下值之一: pk-only (默认), non-lob (可选)和 all (可选)

此参数定义一个命名约定以标识之前映像列,并指定一个筛选条件以确定哪些源列可能在目标上具有为它们创建的之前映像列。当 rule-action 设置为 add-before-image-columns 并且 rule-target 设置为 column 时,您可以指定此参数。

不要同时将 column-prefixcolumn-suffix 设置为空字符串。

对于 column-filter,选择:

  • pk-only – 仅添加属于表主键一部分的列。

  • non-lob – 仅添加非 LOB 类型的列。

  • all – 添加具有之前映像值的任何列。

有关 AWS DMS 目标终端节点的之前映像支持的更多信息,请参阅:

例 重命名架构

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

例 Convert to lowercase

以下示例将表名从 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 emp_no = 1;

将 CDC 更新写入支持的 AWS DMS 目标时,通过 BI_emp_no 列可以判断哪些行在 emp_no 列中具有更新的值。

使用转换规则表达式定义列内容

要定义新列和现有列的内容,可以在转换规则中使用表达式。例如,使用表达式,您可以添加列或将源表标头复制到目标。您还可以使用表达式将目标表上的记录标记为在源中插入、更新或删除。

使用表达式添加列

要使用转换规则中的表达式向表添加列,请使用 add-column 规则操作和 column 规则目标。

以下示例将新列添加到 ITEM 表中。它将新列名称设置为 FULL_NAME,数据类型为 string,长度为 50 个字符。此表达式连接两个现有列 LAST_NAMEFIRST_NAME 的值,以便计算结果为 FULL_NAME

{ "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": "ITEM" }, "value": "FULL_NAME", "expression": "$FIRST_NAME||'_'||$LAST_NAME”, "data-type": { "type": "string", "length": 50 } } ] }

使用表达式标记目标记录

要将目标表中的记录标记为在源表中插入、更新或删除,请在转换规则中使用表达式。表达式使用 operation_indicator 函数来标记记录。从源中删除的记录不会从目标中删除。而是使用用户提供的值标记目标记录,以指示该记录已从源中删除。

注意

operation_indicator 函数仅适用于具有主键的表。

例如,以下转换规则首先将新的 Operation 列添加到目标表中。然后,只要从源表中删除记录,它就会更新具有值 D 的列。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "Operation", "expression": "operation_indicator('D', 'U', 'I')", "data-type": { "type": "string", "length": 50 } }

使用表达式复制源表标头

默认情况下,源表的标头不会复制到目标。要指示要复制哪些标头,请将转换规则与包含表列标头的表达式结合使用。

您可以在表达式中使用以下列标头。

标头 正在进行的复制中的值 完全加载中的值 数据类型
AR_H_STREAM_POSITION 来自源的流位置值。此值可能是系统更改号 (SCN) 或日志序列号 (LSN),具体取决于源终端节点。 空字符串。 STRING
AR_H_TIMESTAMP 指示更改时间的时间戳。 指示当前时间的时间戳。 DATETIME
AR_H_COMMIT_TIMESTAMP 指示提交时间的时间戳。 指示当前时间的时间戳。 DATETIME
AR_H_OPERATION INSERT、UPDATE 或 DELETE INSERT STRING
AR_H_USER 源提供的有关进行更改的用户的用户名、ID 或任何其他信息。

此标头仅在 SQL Server 和 Oracle(版本 11.2.0.3 及更高版本)源终端节点上受到支持。

要应用于对象的转换。转换规则操作区分大小写。 STRING

以下示例通过使用源中的流位置值向目标添加新列。对于回传服务器,流位置值是源端点的LSN。对于Oracle,流位置值是源端点的SCN。

{ "rule-type": "transformation", "rule-id": "2", "rule-name": "2", "rule-target": "column", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "add-column", "value": "transact_id", "expression": "$AR_H_STREAM_POSITION", "data-type": { "type": "string", "length": 50 } }

表设置规则和操作

您可以使用表设置指定要应用于指定操作的选定表或视图的任何设置。表设置规则是可选的。

对于使用表设置规则类型的表映射规则,您可以应用以下参数。

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

  • table-name – 表或视图的名称。

特定架构和表或视图的名称(无通配符)。

parallel-load 一个带以下参数的对象:
  • type – 指定是否启用并行加载。如果是,则此参数还指定用于标识要并行加载的表或视图分区、子分区或其他段的机制。分区是已在源表或视图中按名称定义和标识的段。仅对于 Oracle 终端节点,子分区是已在源表或视图中按名称定义和标识的其他级别的段。您可以通过在一个或多个表或视图列的值范围中指定边界,在 table-settings 规则中标识其他段。

  • partitions – 当 typepartitions-list 时,此值指定要并行加载的所有分区。

  • subpartitions – 仅对于 Oracle 终端节点,当 typepartitions-list 时,此值指定要并行加载的所有子分区。

  • columns – 当 typeranges 时,此值指定用于标识要并行加载的基于范围的段的列的名称。

  • boundaries – 当 typeranges 时,此值指定用于标识要并行加载的基于范围的段的 columns 值。

该值指定由 object-locator 选项标识的表或视图上的并行加载(多线程)操作。在这种情况下,您可以通过以下任意方式并行加载:

  • 按所有可用分区或子分区指定的段。

  • 按选定的分区和子分区。

  • 按您指定的基于范围的段。

有关并行加载的更多信息,请参阅 对所选表和视图使用并行加载

type parallel-load 的以下操作之一:
  • partitions-auto – 所有表或视图的分区都是并行加载的。每个分区都分配到自己的线程。

  • subpartitions-auto –(仅限 Oracle 终端节点)表或视图的所有子分区都是并行加载的。每个子分区都分配到自己的线程。

  • partitions-list – 表或视图的所有指定分区都是并行加载的。仅限 Oracle 终端节点,表或视图的所有指定子分区都是并行加载的。您指定的每个分区和子分区都分配到自己的线程。您可以通过分区名称 (partitions) 和子分区名称 (subpartitions) 指定要并行加载的分区和子分区。

  • ranges – 表或视图的所有指定段都是并行加载的。您标识的每个表或视图段都分配到自己的线程。您可以按列名 (columns) 和列值 (boundaries) 指定这些段。

  • none – 表或视图是在单线程任务(默认)中加载的,无论其分区或子分区如何都是如此。有关更多信息,请参阅 创建任务。)

    注意

    PostgreSQL 作为源时仅支持此类型的并行负载。

用于标识要并行加载的表或视图分区、子分区或段的机制。
partitions typepartitions-list 时,这是一个字符串数组,用于指定并行加载的分区的名称。 要并行加载的分区的名称。
subpartitions (仅限 Oracle 终端节点)当 typepartitions-list 时,这是一个字符串数组,用于指定并行加载的子分区的名称。 要并行加载的子分区的名称。
columns typeranges 时,这是设置为列名称的字符串数组,用于标识并行加载的基于范围的表或视图段。 用于标识要并行加载的基于范围的表或视图段的列的名称。
boundaries typeranges 时,这是列值数组的数组。每个列值阵列包含数量和顺序指定的列值 columns。列值阵列指定表格或视图段的上边界。每个附加列值数组都会为一个附加表或视图段添加上边界。所有这些基于范围的表或视图段都是并行加载的。 用于标识要并行加载的基于范围的表或视图分区的列值。
lob-settings 一个带以下参数的对象:
  • mode – 指定 LOB 的迁移处理模式。

  • bulk-max-size – 指定 LOB 的最大大小,具体取决于 mode 设置。

一个值,指定由 object-locator 选项标识的表或视图的 LOB 处理。指定的 LOB 处理仅覆盖此表或视图的任何任务 LOB 设置。有关使用 LOB 设置参数的更多信息,请参阅 为所选表或视图指定 LOB 设置
mode 使用以下值指定所选表或视图中 LOB 的迁移处理:
  • limited –(默认)此值将迁移设置为有限的 LOB 模式,所有 LOB 与表或视图中的所有其他列数据类型一起进行内联迁移。在复制大多数小 LOB(100 MB 或更小)时使用此值。此外,指定一个 bulk-max-size 值(0 无效)。所有大于 bulk-max-size 的已迁移 LOB 都将截断为您设置的大小。

  • unlimited – 此值将迁移设置为完全 LOB 模式。当要复制的所有或大多数 LOB 大于 1 GB 时,请使用此值。如果您指定的 bulk-max-size 值为零,则所有 LOB 都在标准完全 LOB 模式中迁移。在这种形式的 unlimited 模式中,会使用源表或视图中的查找将所有 LOB 与其他列数据类型分开迁移。如果您指定一个大于零的 bulk-max-size 值,则所有 LOB 都在组合完全 LOB 模式中迁移。在这种形式的 unlimited 模式中,会使用源表或视图查找迁移大于 bulk-max-size 的 LOB,类似于标准完全 LOB 模式。否则,小于等于此大小的 LOB 将内联迁移,类似于有限 LOB 模式。无论您使用何种形式,都不会在 unlimited 模式下截断 LOB。

  • none – 所有表或视图 LOB 都会根据任务 LOB 设置迁移。

    有关任务 LOB 设置的更多信息,请参阅目标元数据任务设置

    有关如何迁移 LOB 以及如何指定这些任务 LOB 设置的更多信息,请参阅在 AWS DMS 任务中为源数据库设置 LOB 支持

用于迁移 LOB 的机制。
bulk-max-size 此值的影响取决于 mode LOB 的最大大小(以 KB 为单位)。仅当您需要复制较小 LOB 或目标终端节点不支持无限制的 LOB 大小时,才指定此选项。

对所选表和视图使用并行加载

为了加快迁移速度并提高迁移效率,您可以对选定的关系表和视图使用并行加载。换而言之,您可以并行使用多个线程迁移单个分段表或视图。为此,AWS DMS 将完全加载的任务拆分为线程,每个表段分配给自己的线程。

使用此并行加载过程,您可以首先让多个线程从源终端节点并行卸载多个表和视图。然后,您可以迁移多个线程,并将相同的表和视图并行加载到目标终端节点。对于某些数据库引擎,您可以按现有分区或子分区对表和视图进行分段。否则,您可以按指定的列值范围对任何表和视图进行分段。

以下源终端节点支持并行加载:

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL/

  • IBM Db2

  • SAP Adaptive Server Enterprise (ASE)

以下目标终端节点支持用于表设置规则的并行加载:

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL/

  • SAP Adaptive Server Enterprise (ASE)

要指定并行加载的表和视图的最大数,请使用 MaxFullLoadSubTasks 任务设置。要为并行加载任务指定各个表和视图的最大线程数,请使用 ParallelLoadThreads 任务设置。要为并行加载任务指定缓冲区大小,请使用 ParallelLoadBufferSize 任务设置。ParallelLoadThreadsParallelLoadBufferSize 的可用性和设置取决于目标终端节点。

有关 ParallelLoadThreadsParallelLoadBufferSize 设置的更多信息,请参阅目标元数据任务设置。有关 MaxFullLoadSubTasks 设置的更多信息,请参阅完全加载任务设置。有关特定于目标终端节点的信息,请参阅相关主题。

要使用并行加载,您可以使用 parallel-load 选项创建一个类型为 table-settings 的表映射规则。在 table-settings 规则中,您可以为要并行加载的单个表或视图指定分段条件。要执行此操作,请将 parallel-load 选项的 type 参数设置为多个选项之一。如何执行此操作取决于您希望如何为并行加载分段表或视图:

  • 按分区 – 使用 partitions-auto 类型加载所有现有表或视图分区。或者使用具有指定 partitions 数组的 partitions-list 类型仅加载选定的分区。

  • (仅限 Oracle 终端节点)按子分区 – 使用 subpartitions-auto 类型加载所有现有的表或视图子分区。或者使用具有指定 subpartitions 数组的 partitions-list 类型仅加载选定的子分区。

  • 按您定义的段 – 加载使用列值边界定义的表或视图段。为此,请使用具有指定 columnsboundaries 数组的 ranges 类型。

    注意

    PostgreSQL 作为源时仅支持此类型的并行负载。

要标识要并行加载的其他表或视图,请使用 parallel-load 选项指定其他 table-settings 对象。

在以下过程中,您可以了解如何为每种并行加载类型编写 JSON 代码(从最简单到最复杂)。

指定所有表或视图的分区或所有表和视图的子分区

  • 使用 partitions-auto 类型或 subpartitions-auto 类型(但不能同时使用二者)指定 parallel-load

    然后,每个表或视图的分区或子分区都会自动分配到自己的线程。

    注意

    并行加载仅包括已为表或视图定义的分区或子分区。

指定选定表或视图的分区和/或子分区

  1. 使用 partitions-list 类型指定 parallel-load

  2. (可选)通过将分区名称数组指定为 partitions 的值来包含分区。

    然后,每个指定的分区将分配到自己的线程。

  3. (可选,仅对于 Oracle 终端节点)通过将子分区名称数组指定为 subpartitions 的值来包含子分区。

    然后,每个指定的子分区将分配到自己的线程。

    注意

    并行加载仅包括已为表或视图定义的分区或子分区。

您可以指定表或视图段作为列值范围。执行此操作时,请注意以下列特征:

  • 指定索引列可显著提高性能。

  • 您可以指定最多 10 个列。

  • 您不能使用列定义分段边界,如下所示 AWS DMS 数据类型: 双重、FLOAT、BLOB、CLOB和NCLOB

  • 不会复制具有 null 值的记录。

指定表或视图段作为列值范围

  1. 使用 ranges 类型指定 parallel-load

  2. 通过指定列名称阵列作为值来定义表或视图段之间的边界 columns。对要定义表或视图段之间边界的每一列执行该操作。

    列的顺序很重要。在定义每个边界时,第一列是最重要的,最后一列最不重要,如下所述。

  3. 通过指定边界数组作为值来定义所有表或视图段的数据范围 boundaries。A 边界阵列 是列值数组的数组。要实现此目的,请执行以下步骤:

    1. 将列值数组的每个元素指定为与每个列对应的值。列值数组 代表您要定义的每个表或视图段的上边界。按照您在 columns 数组中指定该列的顺序指定每个列。

      注意

      以源支持的格式输入 DATE 列的值。

    2. 将每个列值数组按顺序指定为每个段的上边界(从表或视图的底部段到顶部第二个段)。如果您指定的顶部边界上方存在任何行,则这些行将填充表或视图的顶部段。因此,基于范围的段的数量可能比边界数组中的段边界的数量多一个。每个这样的基于范围的段被分配到自己的线程。

      注意

      将会复制所有非 null 数据,即使您没有为表或视图中的所有列定义数据范围也是如此。

    例如,假设您为列 COL1、COL2 和 COL3 定义三个列-值数组,如下所示。

    COL1 COL2 COL3
    10* 30 105
    20 20 120
    100 12 99

    您就可能为总共四个段定义了三个段边界。

    为了标识要为每个段复制的行范围,复制实例会对以下四个段中的每个段的这三个列应用搜索。搜索类似于以下内容:

    段 1

    复制所有行,如下所示: 前两列值小于或等于相应的 第1部分 上边界值。此外,第三列的值小于其段 1 上边界值。

    段 2

    复制所有行(除了 第1部分 行),其中: 前两列值小于或等于相应的 第2部分 上边界值。此外,第三列的值小于其段 2 上边界值。

    段 3

    复制所有行(除了 第2部分 行),其中: 前两列值小于或等于相应的 第3部分 上边界值。此外,第三列的值小于其段 3 上边界值。

    段 4

    复制所有剩余的行(除了段 1、2 和 3 行)。

    在这种情况下,复制实例会创建一个 WHERE 子句来加载每个段,如下所示:

    段 1

    ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105)))

    段 2

    NOT ((COL1 < 10) OR ((COL1 = 10) AND (COL2 < 30)) OR ((COL1 = 10) AND (COL2 = 30) AND (COL3 < 105))) AND ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120)))

    段 3

    NOT ((COL1 < 20) OR ((COL1 = 20) AND (COL2 < 20)) OR ((COL1 = 20) AND (COL2 = 20) AND (COL3 < 120))) AND ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))

    段 4

    NOT ((COL1 < 100) OR ((COL1 = 100) AND (COL2 < 12)) OR ((COL1 = 100) AND (COL2 = 12) AND (COL3 < 99)))

为所选表或视图指定 LOB 设置

您可以通过使用一个或多个 table-settings 对象的 lob-settings 选项创建 table-settings 类型的表映射规则来为一个或多个表设置任务 LOB 设置。

以下源终端节点支持为所选表或视图指定 LOB 设置:

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL/

  • IBM Db2,具体取决于 modebulk-max-size 设置,如下所述

  • SAP Adaptive Server Enterprise (ASE),具体取决于 modebulk-max-size 设置,如下所述

以下目标终端节点支持为所选表或视图指定 LOB 设置:

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL/

  • SAP ASE,具体取决于 modebulk-max-size 设置,如下所述

注意

您只能将 LOB 数据类型用于包含主键的表或视图。

要对选定的表或视图使用 LOB 设置,请使用 lob-settings 选项创建类型为 table-settings 的表映射规则。这样做会指定由 object-locator 选项标识的表或视图的 LOB 处理。在 table-settings 规则中,您可以指定一个具有以下参数的 lob-settings 对象:

  • mode – 指定处理所选表或视图的 LOB 迁移的机制,如下所示:

    • limited – 此默认受限 LOB 模式是最快且最有效的模式。仅当所有 LOB 都较小(大小不超过 100 MB)或目标终端节点不支持无限制 LOB 大小时,才使用此模式。此外,如果使用 limited,则所有 LOB 都必须在为 bulk-max-size 设置的大小范围内。

      在完全加载任务的此模式下,复制实例将所有 LOB 与其他列数据类型一起进行内联迁移,作为主表或视图存储的一部分。但是,实例会将大于您的 bulk-max-size 值的任何迁移 LOB 截断为指定的大小。对于更改数据捕获 (CDC) 加载任务,实例使用源表查找迁移所有 LOB,就像在标准完全 LOB 模式下一样(请参阅下文)。无论 LOB 大小如何,它都会这样做。

      注意

      您只能为完全加载任务迁移视图。

    • unlimited – 完全 LOB 模式的迁移机制取决于您为 bulk-max-size 设置的值,如下所示:

      • 标准完全 LOB 模式 – 当 bulk-max-size 设置为零时,复制实例将使用标准完全 LOB 模式迁移所有 LOB。此模式需要在源表或视图中进行查找,以便迁移每个 LOB,无论大小如何都是如此。此方法通常会比对于有限 LOB 模式迁移慢得多。仅当所有或大多数 LOB 都较大(1 GB 或更大)时才使用此模式。

      • 组合完全 LOB 模式 – 将 bulk-max-size 设置为非零值时,此完全 LOB 模式使用有限 LOB 模式和标准完全 LOB 模式的组合。这适用于完全加载任务,如果 LOB 大小在您的 bulk-max-size 值范围内,则实例会在有限 LOB 模式下内联迁移 LOB。如果 LOB 大小大于此值,则实例使用源表或视图查找迁移 LOB,就像在标准完全 LOB 模式下一样。对于更改数据捕获 (CDC) 加载任务,实例使用源表查找迁移所有 LOB,就像在标准完全 LOB 模式下一样(请参阅下文)。无论 LOB 大小如何,它都会这样做。

        注意

        您只能为完全加载任务迁移视图。

        此模式导致迁移速度处于更快的有限 LOB 模式和更慢的标准完全 LOB 模式之间。只有当混合使用较小和较大 LOB 并且大多数 LOB 较小时才使用此模式。

        此组合完全 LOB 模式仅适用于以下终端节点:

        • IBM Db2 作为源

        • SAP ASE 作为源或目标

      无论您为 unlimited 模式指定的机制如何,实例都会完全迁移所有 LOB,而不会截断。

    • none – 复制实例使用任务 LOB 设置迁移所选表或视图中的 LOB。使用此选项来帮助比较对于所选表或视图,在具有和不具有 LOB 设置时的迁移结果。

    如果指定的表或视图包含复制中包含的 LOB,则只能在使用 limited LOB 模式时将 BatchApplyEnabled 任务设置指定为 true

    在某些情况下,您可能会设定 BatchApplyEnabledtrueBatchApplyPreserveTransactionfalse。在这些情况下,实例会 BatchApplyPreserveTransactiontrue 如果表格或视图有LOB,而来源和目标终点是Oracle。

  • bulk-max-size – 将此值设置为零或非零值(以 KB 为单位),具体取决于为前面项目描述的 mode。在 limited 模式中,您必须为此参数设置非零值。

    实例将 LOB 转换为二进制格式。因此,要指定需要复制的最大 LOB,请将其大小乘以 3。例如,如果您的最大 LOB 为 2 MB,请将 bulk-max-size 设置为 6,000 (6 MB)。

表设置示例

下面,您可以找到一些演示如何使用表设置的示例。

例 加载按分区分段的表

以下示例通过基于其所有分区并行加载源中的 SALES 表来更有效地加载它。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-auto" } } ] }

例 加载按子分区分段的表

以下示例通过基于其所有子分区并行加载 Oracle 源中的 SALES 表来更有效地加载它。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "subpartitions-auto" } } ] }

例 加载按分区列表分段的表

以下示例通过按特定分区列表并行加载源中的 SALES 表来加载它。在此,指定的分区以用字母的部分开头的值命名,例如 ABCDEFGH 等等。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-list", "partitions": [ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWXYZ" ] } } ] }

例 加载按选定的分区和子分区列表分段的 Oracle 表

以下示例通过按选定分区和子分区列表并行加载 Oracle 源中的 SALES 表来加载它。在此,指定的分区以用字母的部分开头的值命名,例如 ABCDEFGH 等等。指定的子分区用以数字开头的值命名,例如 0123456789

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "partitions-list", "partitions": [ "ABCD", "EFGH", "IJKL", "MNOP", "QRST", "UVWXYZ" ], "subpartitions": [ "01234", "56789" ] } } ] }

例 加载按列值范围分段的表

以下示例通过按 SALES_NOREGION 值的范围指定的段并行加载源中的 SALES 表来加载它。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "ranges", "columns": [ "SALES_NO", "REGION" ], "boundaries": [ [ "1000", "NORTH" ], [ "3000", "WEST" ] ] } } ] }

此处,为段范围指定了两列,其中有名称, SALES_NOREGION。用两组列值指定两个边界(["1000","NORTH"]["3000","WEST"])。

因此,这两个边界标识要并行加载的以下三个表段:

段 1

SALES_NO 小于或等于 1000 且 REGION 小于“NORTH”的行。换句话说, EAST 区域最高为 1,000 的销售数量。

段 2

段 1 以外 SALES_NO 小于或等于 3000 且 REGION 小于“WEST”的行。换句话说,NORTH 和 SOUTH 区域超过 1,000 且不超过 3,000 的销售数量。

段 3

段 1 段 2 以外的所有剩余行。换句话说,WEST 区域超过 3000 的销售数量。

例 加载两个表格: 一个按范围分割,另一个按分区分割

以下示例按您标识的段边界并行加载 SALES 表。它还通过所有分区并行加载 ORDERS 表,如前面的示例所示。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "HR", "table-name": "SALES" }, "parallel-load": { "type": "ranges", "columns": [ "SALES_NO", "REGION" ], "boundaries": [ [ "1000", "NORTH" ], [ "3000", "WEST" ] ] } }, { "rule-type": "table-settings", "rule-id": "3", "rule-name": "3", "object-locator": { "schema-name": "HR", "table-name": "ORDERS" }, "parallel-load": { "type": "partitions-auto" } } ] }

例 使用有限 LOB 模式加载具有 LOB 的表

以下示例使用受限 LOB 模式(默认)加载源中包括 LOB 的 ITEMS 表,最大不截断大小为 100 MB。任何大于此大小的 LOB 都将截断为 100 MB。所有 LOB 都与所有其他列数据类型一起内联加载。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "bulk-max-size": "100000" } } ] }

例 使用标准完全 LOB 模式加载具有 LOB 的表

以下示例使用标准完全 LOB 模式加载源中的 ITEMS 表,包括所有 LOB 而不截断。所有 LOB,无论大小,都通过在源表中对每个 LOB 使用查找与其他数据类型分开加载。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "unlimited" "bulk-max-size": "0" } } ] }

例 使用组合完全 LOB 模式加载具有 LOB 的表

以下示例使用组合完全 LOB 模式加载源中的 ITEMS 表,包括所有 LOB 而不截断。所有大小为 100 MB 的 LOB 都与其他数据类型一起内联加载,就像在有限 LOB 模式下一样。所有大小超过 100 MB 的 LOB 从其他数据类型单独加载。此单独加载为源表中的每个此类 LOB 使用一个查找,类似于标准的完整 LOB 模式中。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "unlimited" "bulk-max-size": "100000" } } ] }

例 使用任务 LOB 设置加载具有 LOB 的表

以下示例使用其任务 LOB 设置加载源中的 ITEMS 表,包括所有 LOB。100 MB 的 bulk-max-size 设置会被忽略,仅用于快速重置为 limitedunlimited 模式。

{ "rules": [{ "rule-type": "selection", "rule-id": "1", "rule-name": "1", "object-locator": { "schema-name": "%", "table-name": "%" }, "rule-action": "include" }, { "rule-type": "table-settings", "rule-id": "2", "rule-name": "2", "object-locator": { "schema-name": "INV", "table-name": "ITEMS" }, "lob-settings": { "mode": "none" "bulk-max-size": "100000" } } ] }

使用源筛选器

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

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

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

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

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

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

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

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

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

以下限制适用于使用源筛选器:

  • 筛选器不计算使用从右到左语言的列。

  • 不要将筛选器应用于 LOB 列。

  • 仅将筛选器应用于不可变 列,这些列在创建后不会更新。如果将源筛选器应用于可变 列(可在创建后更新),可能会导致不良行为。

    例如,如果筛选器在某列中排除或包含特定行,则会始终排除或包含这些指定的行,即使该行稍后发生了更改。假设在 A 列中排除或包含第 1–10 行,之后这些行发生了更改,变为了第 11–20 行。在这种情况下,即使数据已经不同,这些行仍旧排除或包含在内。

    同样,假设不在筛选器范围内的某行稍后进行了更新(或者更新并删除),此时按照筛选器的定义应当排除或包含在内。在这种情况下,它会在目标上复制。

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

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

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

参数:

Value

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" }] }] }] }