Teradata 多重加载
MultiLoad 可以一次加载多个表,也可以执行不同类型的任务,例如 INSERT、DELETE、UPDATE 和 UPSERT。它一次最多可以加载 5 个表,并在一个脚本中执行最多 20 个 DML 操作。 MultiLoad 不需要目标表。
MultiLoad 支持两种模式-
导入
删除
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-命名导入文件。
步骤 7-指定要使用的布局。
步骤 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;
执行多加载脚本
一旦创建了输入文件employee.txt 并将多重加载脚本命名为EmployeeLoad.ml,那么您就可以在UNIX 和Windows 中使用以下命令运行多重加载脚本。
Multiload < EmployeeLoad.ml;