📜  Teradata MultiLoad

📅  最后修改于: 2021-01-11 11:46:04             🧑  作者: Mango

Teradata MultiLoad

Teradata MultiLoad或MLoad是一个命令驱动的加载实用程序,用于对Teradata大型数据库中的多个表或视图进行快速,大量的数据维护。

MultiLoad是一个命令驱动的实用程序,可以对Teradata关系数据库管理系统(RDBMS)的多个表和视图进行快速,大量的维护。

使用单个MultiLoad作业,我们可以在RDBMS表和视图上执行几种不同的导入和删除任务:

  • 每个MultiLoad导入任务都可以对多达五个不同的表或视图执行多个数据插入,更新和删除功能。
  • 每个MultiLoad删除任务都可以从单个表中删除大量行。

我们可以使用MultiLoad从以下位置导入数据:

  • 通道连接的客户端系统上的磁盘或磁带文件。
  • 在网络连接的工作站上输入文件。
  • 各个输入模块(INMOD)程序进行编写以选择,验证和预处理输入数据。
  • 访问模块。
  • 任何设备都提供正确格式的源数据。

RDBMS中接收数据的表或视图可以是任何现有的表或视图,我们对其具有所需维护任务的访问权限。

多重加载模式

Teradata具有MultiLoad的两种模式,例如:

1. MultiLoad导入

  • 每个MultiLoad导入任务都可以在五个目标表上并行执行多个INSERT,UPDATE,DELETE和UPSERT操作。
  • 它还可以使用自定义访问模块从网络连接的系统或大型机连接的系统中导入数据。

2. MultiLoad删除

  • 每次MultiLoad删除都可以从单个表中删除大量数据。
  • MultiLoad DELETE用于仅对一张表执行全局(所有安培)删除操作。
  • DELETE的主要功能是绕过瞬态日志(TJ),如果在完成之前失败,则可以重新启动。
  • 我们不能在MultiLoad DELETE操作中使用主索引,因为主索引访问是AMP专用的,但是MultiLoad DELETE是为全局删除而构建的。

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

  • 日志表:用于维护在加载期间使用的检查点,这些检查点将用于重新启动。
  • 错误表:这些表是在加载期间发生错误时插入的。第一个错误表存储转换错误,而第二个错误表存储重复的记录。
  • 日志表:维护MultiLoad每个阶段的结果以供重新启动。
  • 工作表: MultiLoad脚本为每个目标表创建一个工作表。工作表用于保留DML任务和输入数据。

MultiLoad功能

Teradata MultiLoad具有以下功能,例如:

  • 高性能维护操作可一次将更新应用于多个表。
  • 最适合更改的行超过1-2%。

数据转换能力

如果将具有字符数据类型的输入数据字段指定为具有日期数据类型规范的列,则Teradata MultiLoad可以将输入数据规范更改为日期,然后再将其插入目标表。

以下是Teradata MultiLoad支持的转换:

  • 数值对数值
  • 字符到数字
  • 字符至今
  • 日期到字符

Teradata MultiLoad限制

Teradata MultiLoad具有以下限制,例如:

  • 没有唯一的二级索引: MultiLoad不支持与FastLoad相同的唯一二级索引(USI),因为在USI子表的情况下,可能会在实际行所在的不同AMP中创建子表。但是与FastLoad不同,它支持非唯一二级索引(NUSI),因为在这种情况下,将在同一AMP中创建合适的二级索引。在MultiLoad中,每个AMP并行且独立地工作。这就是为什么它支持NUSI但不支持USI的原因。
  • 无参考完整性: Teradata MultiLoad不支持的目标表上的参考完整性(RI)。 RI需要进行过多的系统检查才能维护对其他表的引用约束。
  • 不允许使用触发器触发器涉及多个表。 MultiLoad仅处理一个目标表。使用MultiLoad之前,将触发器更改为DISABLED状态。
  • 输入文件没有串联:如果以不同顺序串联数据,则可能会影响重新启动过程。
  • 否聚合,指数运算符或算术函数:如果需要数据转换,则在装入数据之前使用INMOD来准备数据。
  • MultiLoad不支持SELECT,外键引用,哈希索引,联接索引,NOPI表。

MultiLoad如何工作

Teradata MultiLoad导入分为五个阶段:

  • 阶段1(初步阶段):它执行基本的设置活动。
  • 阶段2(DML事务阶段):验证DML语句的语法并将其带到Teradata系统。
  • 阶段3(获取阶段):将输入数据带入工作表并将其锁定。
  • 阶段4(应用程序阶段):应用所有DML操作。
  • 阶段5(清理阶段):释放表锁。

MultiLoad脚本涉及以下步骤:

步骤1 :设置日志表。

步骤2 :登录到Teradata。

步骤3 :然后,指定Target,Work和Error表。

步骤4 :定义INPUT文件布局。

步骤5 :同时,定义DML查询。

步骤6 :命名IMPORT文件。

步骤7 :并指定要使用的LAYOUT。

步骤8 :启动加载。

步骤9 :最后,完成加载并终止会话。

创建具有以下记录的文本文件,并将文件命名为emp.txt。

202001, James, 1980/01/05, 2010/03/01, 1  
202002, Robert, 1983/03/05, 2010/09/01, 1 
202003, Peter, 1983/04/01, 2009/02/12, 2 
202004, Mike, 1984/11/06, 2014/01/01, 2 
202005, Robert, 1984/12/01, 2015/03/09, 3

下面的示例是一个MultiLoad脚本,该脚本从employee表中读取记录并将其加载到Emp_Stg表中。

.LOGTABLE tduser.Emp_log;  
.LOGON 192.168.1.102/dbc,dbc; 
   .BEGIN MLOAD TABLES Emp_Stg;  
      .LAYOUT Emp;  
      .FIELD in_EmpId * VARCHAR(10);  
      .FIELD in_FirstName * VARCHAR(10);   
      .FIELD in_BirthDate * VARCHAR(10); 
      .FIELD in_JoinedDate * VARCHAR(10);  
      .FIELD in_DepartmentNo * VARCHAR(05);

      .DML LABEL EmpLabel; 
      INSERT INTO Emp_Stg 
      (
         EmpId,
         FirstName,
         BirthDate,
         JoinedDate,
         DepartmentNo
      )  
      VALUES 
      (
         :in_EmpId,
         :in_FirstName,
         :in_BirthDate,
         :in_JoinedDate,
         :in_DepartmentNo
      );
      .IMPORT INFILE emp.txt  
      FORMAT VARTEXT ','
      LAYOUT Emp
      APPLY EmpLabel;  
   .END MLOAD;  
LOGOFF;

执行MultiLoad脚本

创建输入文件emp.txt并将MultiLoad脚本命名为EmpLoad.ml之后,我们可以在UNIX和Windows中使用以下命令运行MultiLoad脚本。

Multiload < EmployeeLoad.ml;