Teradata 简明教程

Teradata - MultiLoad

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

MultiLoad 支持两种模式 −

  1. IMPORT

  2. DELETE

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

  1. Log Table − 用于维护加载期间进行的检查点,该检查点将用于重新启动。

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

  3. Log Table − 维护 MultiLoad 每个阶段的结果,以便重新启动。

  4. Work table − MultiLoad 脚本针对每个目标表创建一个工作表。工作表用于保存 DML 任务和输入数据。

Limitation

MultiLoad 有一些限制。

  1. 目标表上不支持唯一辅助索引。

  2. Referential integrity not supported.

  3. Triggers not supported.

How MultiLoad Works

MultiLoad 导入有五个阶段 −

  1. Phase 1 − 预备阶段 – 执行基本的设置活动。

  2. Phase 2 − DML 事务阶段 – 验证 DML 语句的语法,并将它们带入 Teradata 系统。

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

  4. Phase 4 − 应用阶段 – 应用所有 DML 操作。

  5. Phase 5 − 清理阶段 – 释放表锁。

MultiLoad 脚本中涉及的步骤 −

  1. Step 1 − 设置日志表。

  2. Step 2 − 登录到 Teradata。

  3. Step 3 − 指定目标表、工作表和错误表。

  4. Step 4 − 定义输入文件布局。

  5. Step 5 − 定义 DML 查询。

  6. Step 6 − 命名 IMPORT 文件。

  7. Step 7 − 指定要使用的 LAYOUT。

  8. Step 8 − 启动加载。

  9. Step 9 − 完成加载并终止会话。

Example

使用以下记录创建一个文本文件,并将该文件命名为 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 表中的记录并将记录加载到 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;

Executing a MultiLoad Script

创建输入文件 employee.txt 并将 MultiLoad 脚本命名为 EmployeeLoad.ml 后,可使用 UNIX 和 Windows 中的以下命令运行 MultiLoad 脚本。

Multiload < EmployeeLoad.ml;