- Teradata 教程
- Teradata - 首頁
- Teradata 基礎知識
- Teradata - 簡介
- Teradata - 安裝
- Teradata - 架構
- Teradata - 關係型資料庫概念
- Teradata - 資料型別
- Teradata - 表
- Teradata - 資料操作
- Teradata - SELECT 語句
- 邏輯運算子和條件運算子
- Teradata - 集合運算子
- Teradata - 字串操作
- Teradata - 日期/時間函式
- Teradata - 內建函式
- Teradata - 聚合函式
- Teradata - CASE 和 COALESCE
- Teradata - 主索引
- Teradata - 連線
- Teradata - 子查詢
- Teradata 高階特性
- Teradata - 表型別
- Teradata - 空間概念
- Teradata - 二級索引
- Teradata - 統計資訊
- Teradata - 壓縮
- Teradata - EXPLAIN 計劃
- Teradata - 雜湊演算法
- Teradata - 連線索引
- Teradata - 檢視
- Teradata - 宏
- Teradata - 儲存過程
- Teradata - 連線策略
- Teradata - 分割槽主索引
- Teradata - OLAP 函式
- Teradata - 資料保護
- Teradata - 使用者管理
- Teradata - 效能調優
- Teradata - FastLoad
- Teradata - 多表載入 (MultiLoad)
- Teradata - FastExport
- Teradata - BTEQ
- Teradata 有用資源
- Teradata - 問答
- Teradata - 快速指南
- Teradata - 有用資源
- Teradata - 討論
Teradata - 多表載入 (MultiLoad)
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 - 定義輸入檔案佈局。
步驟 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 表讀取記錄並載入到 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;