Teradata 多负载


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

MultiLoad 支持两种模式:

  • IMPORT
  • DELETE

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

  • 日志表 : 用于维护加载过程中采取的检查点,将用于重启。

  • 错误表 :这些表是在加载过程中发生错误时插入的。第一个错误表存储转换错误,而第二个错误表存储重复记录。

  • 日志表 : 维护 MultiLoad 各阶段的结果,用于重启。

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

局限性


MultiLoad 有一些限制。

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

MultiLoad 的工作原理


MultiLoad 导入有五个阶段:

  • Phase 1 : 初步阶段——执行基本的设置活动。

  • Phase 2 : DML Transaction Phase – 验证 DML 语句的语法并将它们带到 Teradata 系统。

  • Phase 3 : 获取阶段——将输入数据带入工作表并锁定工作表。

  • Phase 4 : 应用阶段——应用所有的 DML 操作。

  • Phase 5 : Cleanup Phase – 释放表锁。

一个MultiLoad脚本涉及的步骤是:

  • 步骤 1 :设置日志表。

  • 步骤 2 : 登录Teradata 。

  • 步骤 3 :指定Target、Work和Error表。

  • 步骤 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 并将multiload 脚本命名为EmployeeLoad.ml 后,你可以在UNIX 和Windows 中使用以下命令运行Multiload 脚本。

Multiload < EmployeeLoad.ml;