Teradata 多负载

2018-01-12 17:15 更新

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表中读取记录并加载到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脚本。

Multiload < EmployeeLoad.ml;
以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号