Fastload

lightningmn發表於2016-01-04

1. 簡介:
Teradata 作為資料倉儲行業的老大,其對資料並行處理能力令人欽佩,而Fastload 工具填充資料的速度絕對可以讓任何人驚訝。本文就Fastload 工具的使用作一介紹,希望能幫助讀者快速掌握這個工具的使用。
Fastload 支援批處理的指令碼編寫方式,也支援互動式的方式。其功能就是從資料檔案中把大批資料快速插入Teradata 資料庫。在資料倉儲建設階段對ETL是非常重要的手段,平均比其他第三方ETL 工具快3 倍以上。

[@more@]

另外Fastload也提供了錯誤-恢復執行功能,能夠繼續先前由於各種原因停下來沒有完成的工作。
Fastload 能夠從主機、專線、或者一般的TCP/IP 連線的計算機節點上執行。
使用限制:必須是空表,並且該表上沒有外健,也沒有除了UPI 或者NUPI 以外的索引。還有要注意的一點,
就是即使要上載的表是MULITISET(允許重複紀錄)的,FASTLOAD 也不會將重複的紀錄裝入。


2. Fastload 執行過程介紹
共有2 個步驟,資料裝載和資料排序過程
裝載過程:接收從資料來源檔案傳來的大量資料,並且按照HASH 演算法把資料進行分佈,分佈到對應的AMP 裡面去。
資料記錄被寫入沒有排序的資料塊中。
資料排序:把裝載步驟生成的大量資料塊進行排序操作,並且把資料塊寫入磁碟。
3. 支援的檔案格式
在使用FASTLOAD 時候,資料來源檔案有很嚴格的規則。
FASTLOAD 支援5 種檔案格式
a) DATA 檔案:使用FASTEXPORT 或者BTEQ 生成的資料檔案。(用.export data file=… 命令生成)。
b) INDICDATA 檔案: 和第一種的區別在於檔案包含了NULL 的資訊(用.export indicdata file=…命令生成)。
c) VARTEXT 檔案:變長的紀錄欄位,每個欄位之間用某個特定的字元分隔。
d) 無格式檔案:需要指定某個欄位的起始位置和長度,還要指定換行符的長度
(需要注意的是UNIX 裡面用一個位元組長度表示換行,WINDOWS 裡面是2 個)
例如檔案格式為:
+470000000542+0010+470000000659+Jan 01 2003+
+470000000543+0011+470000000660+Jan 11 2003+
+470000000544+0012+470000000661+Jan 23 2003+
就必須這樣定義欄位(WINDOWS 環境)
define
SERV_ID (char(12)), deliml(char(1)),
CUST_ID (char(4)), delim2(char(1)),
CONTRACT (char(12)), delim3(char(1)),
C_DATE (char(11)), delim4(char(1)),
newlinechar(char(2))
e)二進位制檔案:用得比較少。
4. Fastload 的.Begin Loading 命令介紹
.begin loading dbname.tablename errorfiles dname.e1,dname.e2,checkpoint 1000 indicators;
dbname 表示要裝入的資料庫名稱
tablename 表示要裝載的表的名稱(必須已經存在)
e1 和e2 可以隨意指定(不能和資料庫中已經存在的物件重名)用來記錄當FASTLOAD 不成功時候的錯誤資訊,
對應錯誤的資料包等資訊,並且能夠利用這2 個表進行一旦出現上傳友問題時候,不用全部重新開始上傳的恢復機制。
Checkpoint 1000 表示每1000 條記錄檢查一次,在第一步驟暫停情況下,可以不用重新從第一條記錄開始,而從最
後一次檢查點處繼續裝載過程。
Indicators 表示當資料檔案裡面有表示空子段的標示時,可以保留空子段。前提是要上傳的檔案時使用fastexport 或者
bteq 的 .import indicdata file=…;方式生成的資料檔案。
5. Fastload 的“錯誤恢復執行”功能
a)如果資料在裝載過程出錯(資料庫空間不夠或者使用者中止程式的執行等),在排除錯誤後可以重新執行FASTLOAD 指令碼,
如果指定了CHECKPOINT 引數,資料將在透過CHECKPOINT 點處開始繼續裝載。如果沒有指定CHECKPOINT,系統將不知道從
哪裡開始是準確的,從第一條開始重新裝載。
b)多次裝載,這個功能非常有用,比如要裝載的表的內容在2 個檔案中,就應該採用該功能。如果在一個指令碼中執行了
BEGIN LOADING 但是沒有ENDLOADING 語句,並且沒有任何錯誤。裝載將停下來,等待使用者選擇裝載下個一個檔案或者執
行END LOADING 語句。
c)如果程式在第二階段出錯,只要簡單的執行BEGIN LOAGING 和END LOADING命令即可,這樣將重新第二階段的執行。
6. Fastload 互動方式常用命令
HELP;可以看到FASTLOAD 的全部語法
SHOW;可以檢視由DEFINE 命令定義的欄位格式
HELP TABLE TNAME;比較有用,可以不用對欄位進行逐一定義,省略DEFINE語句。
CLEAR;清除上面所有DEFINE 的定義
另外DEFINE 的內容可以疊加,可以定義若干欄位之後,HELP TABLE 這時候SHOW之後就會發現定義的內容是
DEFINE命令和HELP TABLE命令的全部內容。
7. Sessions 命令說明
sessions 指定了同時連線TERADATA 伺服器的程式數目,
sessions 命令的語法是 sessions max min;
限制條件是最多可以指定與AMP 個數相同個session,如果大於AMP 個數,將按照AMP 個數進行處理。
Sessions *;表示將用系統的AMP 個數進行操作。
題外話:session 命令在不同的工具中有不同的寫法,多個session 不一定好,對fastload 來說,session
多一些很有好處,但是對於需要進行全表掃描的操作多個session 仍然會造成session 的順序執行,同時浪費資
源,降低系統的效能。例如bteq 裡面如果需要在沒有索引的欄位上進行對某條記錄的查詢,就不要用多個session.
8. Fastload 指令碼例子和說明(其中資料來源檔案的格式是變長紀錄的文字檔案)
sessions 4;
errlimit 25;
/*登陸伺服器,要修改hosts 檔案格式為增加一行 teracop1 10.10.10.10 */
logon tera/qin,qin;
/*建立要插入的空表*/
create table qin.mb_nbr (
SERV_ID varchar(12),
CUST_ID smallint,
CONTRACT varchar(12),
C_DATE date
)unique primary index(SERV_ID);
/*設定原始檔的格式為變長的字串,並且每個欄位用’:’分隔*/
set record vartext ":" ;
/*定義要傳入的表的欄位格式和資料檔名稱*/
define
SERV_ID (varchar(12)),
CUST_ID (smallint),
CONTRACT (varchar(12)),
C_DATE (date ,NULLIF=0)
) file=e:MB_SERV_ACC_NBR;
/*顯示上面的定義*/
show;
/*開始裝載資料*/
begin loading mb_nbr errorfiles qin.e1, qin.e2 checkpoint 1000;
insert into qin.mb_nbr(
:SERV_ID,
:CUST_ID,
:CONTRACT);
/*結束裝載並退出*/
end loading;
logoff;
9. 執行的片斷,從中可以清楚地看到FASTLOAD 的2 個階段。
C:_fastload>fastload <fl_in.ctl >fl_out.txt ( <表示輸入指令碼, >表示
輸入螢幕內容)
**** 16:57:45 Number of recs/msg: 232
**** 16:57:45 Starting to send to RDBMS with record 1
**** 16:57:51 Starting row 100000
**** 16:57:59 Starting row 200000
**** 16:58:07 Starting row 300000
**** 16:58:14 Starting row 400000
**** 16:58:22 Starting row 500000
**** 16:58:32 Starting row 600000
**** 16:58:43 Starting row 700000
**** 16:58:48 Sending row 747882
**** 16:58:48 Finished sending rows to the RDBMS
==============================================================
= End Loading Phase =
==============================================================
0010 end loading;
**** 17:00:55 END LOADING COMPLETE
Total Records Read = 747882
Total Error Table 1 = 0 ---- Table has been dropped
Total Error Table 2 = 0 ---- Table has been dropped
Total Inserts Applied = 747882
Total Duplicate Rows = 0
Start: Thu Sep 04 16:58:50 2003
End : Thu Sep 04 17:00:55 2003
0011 logoff;
==============================================================
= Logoff/Disconnect
==============================================================
**** 17:01:05 Logging off all sessions
**** 17:01:05 Total processor time used = '11.1761 Seconds'
. Start : Thu Sep 04 16:57:40 2003
. End : Thu Sep 04 17:01:05 2003
. Highest return code encountered = '0'.
**** 17:01:05 FDL4818 FastLoad Terminated

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29048952/viewspace-1970795/,如需轉載,請註明出處,否則將追究法律責任。