Teradata FastLoad17 Mar 2025 | 5 分钟阅读 Teradata FastLoad 用于将大量数据加载到 Teradata 系统上的空表中,或将数据从客户端加载到数据库系统中。 它允许快速加载单个空表,且该表不包含 **SIs, JIs, HIs** 或 **RI (FKs)**,也没有列分区。 FastLoad 将大量数据加载到 Teradata 数据库上的空表中,该表可以有或没有主索引。然而,行大小和列数比其他任何因素都更能影响性能。 Teradata FastLoad 是一个命令驱动的实用程序,可以以批处理模式或交互模式调用。 Teradata FastLoad 实用程序建立多个会话,默认情况下,每个 AMP 一个会话,在操作过程中不使用任何临时日志,并且使用块而不是行来传输数据加载到表中。这就是它如此之快的原因。 它一次只能加载一个表。如果我们想同时加载多个表,则需要启动多个 FastLoad 作业。FastLoad 可以从以下位置加载数据: - 网络连接工作站上的输入文件。
- 通道连接工作站的磁盘或磁带文件。
- 用于选择、验证和预处理输入数据的独立输入模块 (INMOD) 例程。
- 任何其他提供正确格式化源数据的设备。
Teradata FastLoad 先决条件运行任何 Teradata FastLoad 需要指定三个关键组件。 1. 日志表:需要一个日志表来跟踪系统上运行的每个 FastLoad 会话的状态。 Teradata 在 **SYSADMIN** 数据库下维护一个名为 **fastlog** 的表。要使用此表,我们需要对该表拥有 INSERT、DELETE 和 UPDATE 权限。 2. 空目标表:FastLoad 在向目标表插入数据之前需要一个空的。FastLoad 不关心如何实现这一点。 我们可以通过在开始加载之前删除目标表中的数据或删除并重新创建目标表来实现。 3. 两个错误表:FastLoad 需要两个错误表来捕获 FastLoad 过程中发生的任何异常。这些表将自动创建。 - 第一个错误表:用于捕获任何翻译错误或约束冲突。
例如,一个列数据类型错误的行将被报告到第一个错误表中。 - 第二个错误表:用于捕获因唯一主索引 (UPI) 重复值而导致的错误。
FastLoad 将只加载每个 UPI 的一个实例,并将重复的出现存储在第二个表中。但是,如果整个行都重复,FastLoad 会计算它,但不会存储该行。
注意 Teradata 最多允许同时运行 15 个 FastLoads、Multiloads 或 FastExports。这可以防止系统将所有资源都分配给加载实用程序。FastLoad 的阶段FastLoad 将整个过程分为两个阶段: 阶段 1:采集 - 此阶段的主要目标是尽快将数据从主机计算机传输到 Teradata 环境,供访问模块处理器 (AMP) 使用。
- Teradata 解析引擎读取输入文件中的记录,并将一个块发送给每个 AMP。
- 然后 PE 直接打开从 FastLoad 客户端到 AMP 的会话。默认情况下,它将为每个 AMP 创建一个会话。
- 其中一个客户端会话将原始数据打包成 64K 的块。
- 然后,这个大的数据块将被随机发送到 AMP,而不关心哪个 AMP 接收到数据。
- 在接收到每个数据块后,每个 AMP 根据主索引对其行进行哈希处理,并将它们重新分发到正确的 AMP。
- 行重新分发后,数据将被写入 AMP 上的内部工作表,但仍未排序。
- 在阶段 1 结束时,每个 AMP 都拥有其行,但它们并非按行哈希顺序排列。
阶段 2:应用 - 此阶段的主要目标是将数据写入实际的表空间。
- 当 FastLoad 收到 END LOADING 语句时,阶段 2 开始。
- 每个 AMP 将开始对第二个错误表中的行进行排序。
- 排序完成后,这些行将被永久写入磁盘上的实际数据块。
- 目标表上的锁被释放,错误表被删除。
示例 创建具有以下记录的文本文件,并将其命名为 emp.txt。 以下是一个将上述文件加载到 Emp_Stg 表的示例 FastLoad 脚本。 执行 FastLoad 脚本一旦创建了输入文件 emp.txt,并且 FastLoad 脚本命名为 EmpLoad.fl,我们就可以使用以下命令在 UNIX 和 Windows 中运行 FastLoad 脚本。 上述命令执行后,FastLoad 脚本将运行并生成日志。在日志中,可以看到 FastLoad 处理的记录数量和状态代码。
|