如何在 Teradata 中使用快速加载或 MLOAD 等导入实用程序(如果目标表具有参照完整性)



我是Teradata的新手,几周前就开始探索。我知道快速加载或多加载实用程序仅在表上没有引用完整性(如外键关系)时才有效。我想知道,如果我的表实际上具有外键引用,并且我想将数据从任何文本或分隔文件导入该表,该怎么办。使用快速加载/mload 或任何替代方法导入是否有调整?

Gowtham Vakani,

我相信您需要 TPUPM,但在 Teradata 中的三个负载实用程序中,这个最无效。 我建议使用FastLoad,方法是将源数据转储到适合FastLoad的登陆表中,然后在Teradata中进行必要的转换。 我在下面列出了一些信息和三种类型之间的一些差异,因此您可以根据需要和性能计划进行选择。 如果您需要任何示例脚本,我可以向您发送一些示例脚本。

快速加载实用程序用于将数据加载到空表中。由于它不使用瞬态日志,因此可以快速加载数据。即使目标表是 MULTISET 表,它也不会加载重复的行。

限制- 目标表不应具有二级索引、联接索引和外键引用。

快速加载的工作原理- 快速加载分两个阶段执行。FastLoad 将其工作分为两个阶段,这两个阶段都是为速度而设计的。

阶段1 或收购阶段

  • 阶段 1 的主要目的是将数据从主机获取到 Teradata 系统。
  • 解析引擎从输入文件中读取记录,并向每个 AMP 发送一个块。数据以 64 K 块的形式移动,并存储在 AMP 的工作表中。
  • 每个 AMP 都存储记录块。
  • 然后,AMP 对每条记录进行哈希处理,并将其重新分发到正确的 AMP。
  • 在第 1 阶段结束时,每个 AMP 都有自己的行,但它们不像最初存储的那样按行哈希顺序排列。

第 2 阶段

  • 阶段 2 在 FastLoad 收到 END LOAD 语句时开始。
  • 从服务器移出数据后,每个 AMP 都会对其工作表行进行哈希处理。
  • 每个 AMP 对行哈希上的记录进行排序,并将其写入磁盘。
  • 每个 ow 都转移到它们永久驻留的工作台上。
  • 表的行存储在数据块中的磁盘上。
  • 释放目标表上的锁并删除错误表。

但是,MultiLoad没有相同的限制。 MultiLoad 可以一次加载多个表,还可以执行不同类型的任务,如插入删除、更新和更新插入它可以一次从 LAN 或通道环境加载多个空表或填充的目标表,并在脚本中执行多达 20 个 DML 操作。多加载不需要目标表。 多负载支持两种模式:

  • 进口
  • 删除

除了目标表之外,MultiLoad 还需要一个工作表、一个日志表和两个错误表。

  • 日志表 − 日志表存储加载期间的处理记录信息。此表包含系统上运行的每个 MultiLoad 的一行。
  • 错误表:与FastLoad一样,MultiLoad也有两个错误表。第一个错误表 (ET)。它包含从源获取数据时可能发生的所有转换和约束错误。第二个唯一性冲突 (UV) 表,用于存储具有唯一主索引 (UPI) 重复值的行。
  • 工作表:MultiLoad 将自动为每个目标表创建一个工作表。通常,在导入模式下,MultiLoad 可以有一个或多个工作表,而在删除模式下,您只有一个。工作表的目的是 1) 执行 DM 任务 2) 将输入数据应用于 AMP。

限制- 多负载有一些限制。

  • 目标表不支持唯一二级索引:与 FastLoad 一样,MultiLoad 不支持唯一二级索引 (USI)。但与 FastLoad 不同的是,它确实支持使用非唯一二级索引 (NUSI),因为索引子表行与数据行位于同一 AMP 上。
  • 不支持参照完整性
  • :在表上定义的参照完整性需要进行更多的系统检查,以防止参照约束。
  • 加载时不支持触发器:在使用之前禁用所有触发器。
  • 不允许连接输入文件:如果文件以不同的顺序连接或在运行之间删除数据,则可能会影响重新启动。
  • 无联接索引:在运行 MultiLoad 之前必须删除所有联接索引,然后在加载完成后重新创建它们。
  • 不会处理聚合、算术函数或幂:如果您需要数据转换或数学运算,最好使用 INMOD 在加载数据之前准备数据。
  • 目标表
  • :目标表可以包含数据。MultiLoad 可以加载已加载目标表的数据。

多加载的工作原理- 多加载导入有五个导入阶段:

  • 阶段 1 - 初步阶段 - 这是基本设置阶段。它用于成功加载数据的几个初步设置活动。
  • 阶段 2 - DML
  • Transacconfirmationʀ-on Phase – 验证 DML 语句的语法并将其引入 Teradata 系统。所有 SQL 数据操作语言 (DML) 语句都发送到 Teradata 数据库,因为 MultiLoad 支持多个 DML 函数。
  • 阶段
  • 3 − 采集阶段 – 设置完成后,PE 的计划存储在每个 AMP 上。然后,锁、表头和实际输入数据也将存储在工作表中。将输入数据引入工作表并锁定表。
  • 阶段
  • 4 − applica已在机架上 阶段 – 在此阶段,所有 DML 操作都应用于目标表。
  • 阶段
  • 5 − 清理阶段 – 将释放表锁,并删除所有中间工作表。

TPUMP是 Teradata 并行数据泵的缩写。据了解,FastLoad 和 MultiLoad 是大量数据的加载。但是 TPump 使用行哈希锁一次加载一行数据。因为它锁定在此级别,而不是像 MultiLoad 那样锁定在表级别,所以 TPUMP 可以在表上进行许多同时或并发的更新。 TPump 在行级别执行从平面归档到填充的 Teradata 表的插入、更新、删除和更新插入。

TPump 支持:

  • 二级索引
  • 参照完整性
  • 触发器
  • 联接索引
  • 以不同的速率抽取数据。

局限性

  • 不允许串联输入数据文件。
  • TPump 不会处理聚合、算术函数或幂。
  • 不允许使用 SELECT 函数。
  • 单个加载任务中最多可以使用四个 IMPORT 命令。
  • 1900 年之前或 1999 年之后的日期必须由日期的年份部分的 yyyy 格式表示,而不是默认格式 yy。
  • 在某些网络连接系统上,使用 TPump 时的最大文件大小为 2GB。
  • 如果使用访问日志记录,则性能将降低。

TPump 支持一个错误表。错误表执行以下操作:

  • 识别错误。
  • 提供有关错误的一些详细信息
  • 存储实际有问题的行的一部分以进行调试

与其他实用程序一样,只要不删除日志表和错误表,TPump 脚本就可以完全重新启动。

相关内容

最新更新