Teradata 简明教程
Teradata - MultiLoad
MultiLoad 能够一次加载多张表,它还可以执行不同类型的任务,比如 INSERT、DELETE、UPDATE 和 UPSERT。它一次最多可以加载 5 张表,并且在一个脚本中最多可以执行 20 个 DML 操作。MultiLoad 不需要目标表。
MultiLoad 支持两种模式 −
-
IMPORT
-
DELETE
MultiLoad 除目标表外,还需要一个工作表、一个日志表和两个错误表。
-
Log Table − 用于维护加载期间进行的检查点,该检查点将用于重新启动。
-
Error Tables − 当错误发生时,这些表会在加载期间插入。第一个错误表存储转换错误,而第二个错误表存储重复记录。
-
Log Table − 维护 MultiLoad 每个阶段的结果,以便重新启动。
-
Work table − MultiLoad 脚本针对每个目标表创建一个工作表。工作表用于保存 DML 任务和输入数据。
Limitation
MultiLoad 有一些限制。
-
目标表上不支持唯一辅助索引。
-
Referential integrity not supported.
-
Triggers not supported.
How MultiLoad Works
MultiLoad 导入有五个阶段 −
-
Phase 1 − 预备阶段 – 执行基本的设置活动。
-
Phase 2 − DML 事务阶段 – 验证 DML 语句的语法,并将它们带入 Teradata 系统。
-
Phase 3 − 获取阶段 – 将输入数据带入工作表并锁定该表。
-
Phase 4 − 应用阶段 – 应用所有 DML 操作。
-
Phase 5 − 清理阶段 – 释放表锁。
MultiLoad 脚本中涉及的步骤 −
-
Step 1 − 设置日志表。
-
Step 2 − 登录到 Teradata。
-
Step 3 − 指定目标表、工作表和错误表。
-
Step 4 − 定义输入文件布局。
-
Step 5 − 定义 DML 查询。
-
Step 6 − 命名 IMPORT 文件。
-
Step 7 − 指定要使用的 LAYOUT。
-
Step 8 − 启动加载。
-
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;