Teradata - MultiLoad

MultiLoad 可以一次加载多个表,还可以执行不同类型的任务,例如 INSERT、DELETE、UPDATE 和 UPSERT。它一次最多可以加载 5 个表,并在脚本中执行最多 20 个 DML 操作。MultiLoad 不需要目标表。

MultiLoad 支持两种模式 −

  • IMPORT
  • DELETE

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

  • 日志表 − 用于维护加载期间采取的检查点,这些检查点将用于重新启动。

  • 错误表 − 当发生错误时,这些表在加载期间插入。第一个错误表存储转换错误,而第二个错误表存储重复记录。

  • 日志表 − 维护 MultiLoad 每个阶段的结果以供重新启动。

  • 工作表 − MultiLoad 脚本为每个目标表创建一个工作表。工作表用于保存 DML 任务和输入数据。

限制

MultiLoad 有一些限制。

  • 目标表不支持唯一二级索引。
  • 不支持参照完整性。
  • 不支持触发器。

MultiLoad 的工作原理

MultiLoad 导入有五个阶段 −

  • 第 1 阶段 −准备阶段 – 执行基本设置活动。

  • 第 2 阶段 − DML 事务阶段 – 验证 DML 语句的语法并将其带入 Teradata 系统。

  • 第 3 阶段 − 获取阶段 – 将输入数据带入工作表并锁定表。

  • 第 4 阶段 − 应用阶段 – 应用所有 DML 操作。

  • 第 5 阶段 − 清理阶段 – 释放表锁。

MultiLoad 脚本涉及的步骤包括 −

  • 步骤 1 − 设置日志表。

  • 步骤 2 − 登录 Teradata。

  • 步骤 3 − 指定目标、工作和错误表。

  • 步骤 4 − 定义 INPUT 文件布局。

  • 步骤 5 − 定义 DML 查询。

  • 步骤 6 − 命名 IMPORT 文件。

  • 步骤 7 −指定要使用的 LAYOUT。

  • 步骤 8 − 启动加载。

  • 步骤 9 − 完成加载并终止会话。

示例

创建一个包含以下记录的文本文件,并将文件命名为 employee.txt。

101,Mike,James,1980-01-05,2010-03-01,1  
102,Robert,Williams,1983-03-05,2010-09-01,1 
103,Peter,Paul,1983-04-01,2009-02-12,2 
104,Alex,Stuart,1984-11-06,2014-01-01,2 
105,Robert,James,1984-12-01,2015-03-09,3 

以下示例是一个 MultiLoad 脚本,它从员工表读取记录并加载到 Employee_Stg 表中。

.LOGTABLE tduser.Employee_log;  
.LOGON 192.168.1.102/dbc,dbc; 
   .BEGIN MLOAD TABLES Employee_Stg;  
      .LAYOUT Employee;  
      .FIELD in_EmployeeNo * VARCHAR(10);  
      .FIELD in_FirstName * VARCHAR(30); 
      .FIELD in_LastName * VARCHAR(30);  
      .FIELD in_BirthDate * VARCHAR(10); 
      .FIELD in_JoinedDate * VARCHAR(10);  
      .FIELD in_DepartmentNo * VARCHAR(02);

      .DML LABEL EmpLabel; 
      INSERT INTO Employee_Stg (
         EmployeeNo,
         FirstName,
         LastName,
         BirthDate,
         JoinedDate,
         DepartmentNo
      )  
      VALUES (
         :in_EmployeeNo,
         :in_FirstName,
         :in_Lastname,
         :in_BirthDate,
         :in_JoinedDate,
         :in_DepartmentNo
      );
      .IMPORT INFILE employee.txt  
      FORMAT VARTEXT ','
      LAYOUT Employee
      APPLY EmpLabel;  
   .END MLOAD;  
LOGOFF;

执行 MultiLoad 脚本

一旦创建了输入文件 employee.txt,并将多加载脚本命名为 EmployeeLoad.ml,您就可以在 UNIX 和 Windows 中使用以下命令运行多加载脚本。

Multiload < EmployeeLoad.ml;