使用源筛选器 - Amazon Database Migration Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用源筛选器

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

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

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

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

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

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

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

  • 筛选器需要一个列名和一系列筛选条件。筛选条件必须具有与一个值、两个值或无值关联的筛选运算符,具体取决于运算符。

  • 如果指定一个负运算符,如果指定一个负运算符,则可以在单个过滤器中指定不超过一个noteq(不等于),notbetween(不等于或两个值之间)notnull(不NULL有效值)。

  • 列名、表名、视图名和架构名都区分大小写。甲骨文和 Db2 应该始终使用 UPAL 大写。

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

  • 筛选器不计算 right-to-left 语言。

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

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

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

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

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

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

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

参数

filter-type

source

column-name

具有要对其应用筛选器的源列的名称的参数。该名称区分大小写。

filter-conditions

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

filter-operator

具有以下值之一的参数:

  • lte— 小于或等于一个值

  • ste— 小于或等于一个值(lte别名)

  • gte— 大于或等于一个值

  • eq— 等于一个值

  • noteq— 不等于一个值

  • between— 等于或两个值之间

  • notbetween— 不等于或两个值之间

  • nullNULL价值

  • notnull— 不NULL价值

value

start-valueend-value要么

没有值

零个或多个与之关联的值参数filter-operator

  • 如果filter-operatorltestegteeq,或者noteq,使用value以指定一个值参数。

  • 如果filter-operatorbetween要么notbetween,使用start-valueend-value以指定两个值参数。

  • 如果filter-operatornull要么notnull中,不指定值参数。

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

例 单一筛选器

以下筛选器将 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": "lte", "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": "lte", "value": "100" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "eq", "value": "tech" }] }] }] }

例 筛选 Null 值

以下筛选器说明如何基于空值进行筛选。它会将所有 dept = NULL 的员工复制到目标数据库。

{ "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": "dept", "filter-conditions": [{ "filter-operator": "null" }] }] }] }

例 使用 NOT 运算符过滤

其中一些运算符可以用负面形式使用。以下筛选器将 (empid is < 50) OR (empid is > 75) 的所有员工复制到目标数据库中。

{ "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": "notbetween", "start-value": "50", "end-value": "75" }] }] }] }

例 使用 NOT 运算符的多个筛

在单个过滤器(OR 操作)中,您只能使用一个负过滤器条件。但是,您可以使用多个筛选器(AND操作)具有负面的过滤器条件。以下筛选器将 (empid != 50) AND (dept is not NULL) 的所有员工复制到目标数据库中。

{ "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": "noteq", "value": "50" }] }, { "filter-type": "source", "column-name": "dept", "filter-conditions": [{ "filter-operator": "notnull" }] }] }] }

按时间和日期筛选

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