表和集合设置规则和操作 - AWS 数据库迁移服务

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

表和集合设置规则和操作

可以使用表设置,指定要应用于指定操作的选定表或视图的任何设置。表设置规则是可选的,具体取决于端点和迁移要求。

MongoDB 和 Amazon DocumentDB 数据库不使用表和视图,而是将数据记录存储为文档,这些文档聚集在集合中。任何 MongoDB 或 Amazon DocumentDB 端点的单个数据库都是由数据库名称标识的一组特定集合。

从 MongoDB 或 Amazon DocumentDB 源迁移时,使用并行加载设置的方式略有不同。在这种情况下,对于所选集合(而不是表和视图),请考虑自动分段或范围分段类型的并行加载设置。

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

参数 可能的值 描述
rule-type table-settings 一个将规则应用于选定规则所指定的表、视图或集合的值。
rule-id 一个数字值。 一个用于标识规则的唯一数字值。
rule-name 一个字母数字值。 一个用于标识规则的唯一名称。
object-locator 一个带以下参数的对象:
  • schema-name – 架构的名称。对于 MongoDB 和 Amazon DocumentDB 端点,这是存放一组集合的数据库的名称。

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

特定架构和表或视图的名称,或特定数据库和集合的名称(无通配符)。

parallel-load 一个带以下参数的对象:
  • type – 指定是否启用并行加载。

    如果是,则此参数还指定用于标识要并行加载的表或视图分区、子分区或其他段的机制。分区是已在源表或视图中按名称定义和标识的段。

    对于 MongoDB 和亚马逊 DocumentDB 终端节点,分区是分段。 AWS DMS 可以根据关联的自动分段参数自动计算这些值。或者,可以使用范围分段参数手动指定这些参数。

    仅限 Oracle 端点,子分区是已在源表或视图中按名称定义和标识的其他级别的段。您可以通过在一个或多个表或视图列的值范围中指定边界,在 table-settings 规则中标识其他段。

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

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

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

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

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

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

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

  • 按您指定的自动分段或基于范围的段。

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

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

    对于 MongoDB 和 Amazon DocumentDB 源端点而言,这是使用并行完全加载的自动分段选项所必需的设置。

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

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

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

    PostgreSQL 端点仅支持此类型的并行加载。作为源端点的 MongoDB 和 Amazon DocumentDB 既支持此范围分段类型,也支持并行完全加载的自动分段类型(partitions-auto)。

  • none – 表、视图或集合在单线程任务(默认值)中加载,而不论其分区或子分区如何。有关更多信息,请参阅 创建任务

用于标识要并行加载的表、视图或集合分区、子分区或段的机制。
number-of-partitions (可选)当 MongoDB 或 Amazon DocumentDB 端点的指定集合的 typepartitions-auto 时,此参数指定用于迁移的分区(段)的总数。默认值是 16。 指定要并行加载的分区的确切数量。
collection-count-from-metadata (可选)当 type MongoDB 或 Amazon DocumentDB 终端节点的指定集合且此参数设置为 AWS DMS ,则使用估计的集合计数true来确定分区的数量。partitions-auto如果此参数设置为false,则 AWS DMS 使用实际收集次数。默认值为 true 指定是使用估计的集合计数,还是实际的集合计数来计算要并行加载的分区数量。
max-records-skip-per-page (可选)当 MongoDB 或 Amazon DocumentDB 端点的指定集合的 typepartitions-auto 时,此参数为确定每个分区边界时要同时跳过的记录数。 AWS DMS 采用分页跳过法来确定分区的最小边界。默认值是 10000。 指定在确定每个分区的边界时要同时跳过的记录数。设置一个相对默认值较大的值,可能会导致游标超时和任务失败。设置一个相对默认值较低的值,会导致每页的操作次数增加,完全加载速度降低。
batch-size (可选)当 MongoDB 或 Amazon DocumentDB 端点的指定集合的 typepartitions-auto 时,此整数值会限制一个往返批处理中返回的文档数。如果批处理大小为零(0),则游标使用服务器定义的最大批处理大小。默认值是 0。 指定一个批处理中返回的最大文档数。每个批处理需要往返一次服务器。
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 大小时,才指定此选项。

表格设置中的通配符受到限制

源数据库不支持在 "table-settings" 规则中使用百分比通配符("%"),如下所示。

{ "rule-type": "table-settings", "rule-id": "8", "rule-name": "8", "object-locator": { "schema-name": "ipipeline-prod", "table-name": "%" }, "parallel-load": { "type": "partitions-auto", "number-of-partitions": 16, "collection-count-from-metadata": "true", "max-records-skip-per-page": 1000000, "batch-size": 50000 } }

如果您在"table-settings"规则"%"中使用如图所示,则 AWS DMS 返回以下异常。

Error in mapping rules. Rule with ruleId = x failed validation. Exact schema and table name required when using table settings rule.

此外, AWS 建议您不要使用单个任务加载大量的大型集合parallel-load。请注意, AWS DMS 通过 MaxFullLoadSubTasks 任务设置参数值(最大值为 49),限制资源争用以及并行加载的段数。

相反,可通过分别指定每个 "schema-name""table-name",为最大的集合指定源数据库的所有集合。此外,可适当扩大迁移规模。例如,在足够数量的复制实例上运行多个任务,以处理数据库中的大量大型集合。

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

要加速迁移并提高其效率,可以对选定的表、视图和集合使用并行加载。换而言之,可以并行使用多个线程迁移单个分段的表、视图或集合。为此,将满负荷 AWS DMS 任务拆分为线程,并将每个表段分配给自己的线程。

使用此并行加载过程,您可以首先让多个线程从源端点并行卸载多个表、视图和集合。然后,可以迁移多个线程,并将相同的表、视图和集合并行加载到目标端点。对于某些数据库引擎,可以按现有分区或子分区对表和视图进行分段。对于其他数据库引擎,您可以根据特定参数 AWS DMS 自动对集合进行细分(自动分段)。除此之外,可以按指定的列值范围,对任何表、视图或集合进行分段。

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

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • IBM Db2 LUW

  • SAP Adaptive Server Enterprise(ASE)

  • MongoDB(仅支持并行完全加载的自动分段和范围分段选项)

  • Amazon DocumentDB(仅支持并行完全加载的自动分段和范围分段选项)

对于 MongoDB 和 Amazon DocumentDB 终端节点 AWS DMS ,支持以下数据类型,这些列是并行满载的范围分割选项的分区键。

  • Double

  • String

  • ObjectId

  • 32 位整数

  • 64 位整数

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

  • Oracle

  • Microsoft SQL Server

  • MySQL

  • PostgreSQL

  • Amazon S3

  • SAP Adaptive Server Enterprise(ASE)

  • Amazon Redshift

  • MongoDB(仅支持并行完全加载的自动分段和范围分段选项)

  • Amazon DocumentDB(仅支持并行完全加载的自动分段和范围分段选项)

  • Db2 LUW

要指定并行加载的表和视图的最大数,请使用 MaxFullLoadSubTasks 任务设置。

要为并行加载任务的支持目标指定每个表或视图的最大线程数,可使用列值边界定义更多的段。

重要

MaxFullLoadSubTasks 控制要并行加载的表或表段的数量。ParallelLoadThreads 控制迁移任务用于执行并行加载的线程数。这些设置为相乘关系。因此,完全加载任务期间使用的线程总数大约为 ParallelLoadThreads 的值乘以 MaxFullLoadSubTasks 的值(ParallelLoadThreads * MaxFullLoadSubtasks))。

如果您创建的任务包含大量完全加载子任务和大量并行加载线程,则任务可能会消耗过多的内存并失败。

要为 Amazon DynamoDB、Amazon Kinesis Data Streams、Apache Kafka 或 Amazon Elasticsearch Service 目标指定每个表的最大线程数,可使用 ParallelLoadThreads 目标元数据任务设置。

要指定使用 ParallelLoadThreads 时并行加载任务的缓冲区大小,可使用 ParallelLoadBufferSize 目标元数据任务设置。

ParallelLoadThreadsParallelLoadBufferSize 的可用性和设置取决于目标端点。

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

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

如何执行此操作取决于您希望如何为并行加载分段表、视图或集合:

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

    仅适用于 MongoDB 和 Amazon DocumentDB 终端节点,按区段加载所有或指定的集合 AWS DMS ,这些集合也使用partitions-auto类型和其他可选参数自动计算。table-settings

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

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

    注意

    PostgreSQL 端点仅支持此类型的并行加载。作为源端点的 MongoDB 和 Amazon DocumentDB 既支持此范围分段类型,也支持并行完全加载的自动分段类型(partitions-auto)。

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

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

指定所有表、视图或集合分区,或所有表或视图子分区
  • 使用 partitions-auto 类型或 subpartitions-auto 类型(但不能同时使用二者)指定 parallel-load

    然后,每个表、视图或集合分区(或段)或子分区会自动分配到自己的线程。

    对于某些端点,并行加载仅包括已为表或视图定义的分区或子分区。对于 MongoDB 和 Amazon DocumentDB 源终端节点,您可以 AWS DMS 根据可选的附加参数自动计算分区(或分段)。这包括 number-of-partitionscollection-count-from-metadatamax-records-skip-per-pagebatch-size

指定选定表或视图的分区和/或子分区
  1. 使用 partitions-list 类型指定 parallel-load

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

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

    重要

    对于 Oracle 端点,在选择分区和子分区进行并行加载时,请确保分区和子分区不重叠。如果使用重叠的分区和子分区并行加载数据,则会复制条目,或者由于主键重复冲突而失败。

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

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

    注意

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

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

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

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

  • 您不能使用列来定义具有以下 AWS DMS 数据类型的分段边界:DOUBLE、FLOAT、BLOB、CLOB 和 NCLOB

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

指定表、视图或集合段作为列值范围
  1. 使用 ranges 类型指定 parallel-load

  2. 通过列名数组指定为 columns 的值来定义表或视图段之间的边界。对要为其定义表或视图段之间边界的每个列执行此操作。

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

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

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

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

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

      将会复制所有非 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 模式下一样(请参阅下文)。

      注意

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

    • 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

    在某些情况下,您可以将 true 设置为 BatchApplyEnabled,将 BatchApplyPreserveTransaction 设置为 false。在这些情况下,如果表或视图具有 LOB 且源和目标端点是 Oracle,实例会将 BatchApplyPreserveTransaction 设置为 true

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