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;
廣告
© . All rights reserved.