数据仓库TERADATA加载工具FASTLOAD
- 格式:pdf
- 大小:116.48 KB
- 文档页数:4
数据仓库Teradata的装载工具Fastload
秦大林,庞涛
1. 简介:
Teradata作为数据仓库行业的老大,其对数据并行处理能力令人钦佩,而Fastload工
具填充数据的速度绝对可以让任何人惊讶。本文就Fastload工具的使用作一介绍,希
望能帮助读者快速掌握这个工具的使用。
Fastload支持批处理的脚本编写方式,也支持交互式的方式。其功能就是从数
据文件中把大批数据快速插入Teradata数据库。在数据仓库建设阶段对ETL
是非常重要的手段,平均比其他第三方ETL工具快3倍以上。另外Fastload
也提供了错误-恢复执行功能,能够继续先前由于各种原因停下来没有完成的工
作。
Fastload能够从主机、专线、或者一般的TCP/IP连接的计算机节点上运行。
使用限制:必须是空表,并且该表上没有外健,也没有除了UPI或者NUPI以外
的索引。还有要注意的一点,就是即使要上载的表是MULITISET(允许重复纪
录)的,FASTLOAD也不会将重复的纪录装入。
2. Fastload运行过程介绍
共有2个步骤,数据装载和数据排序过程
装载过程:接收从数据源文件传来的大量数据,并且按照HASH算法把数据进行
分布,分布到对应的AMP里面去。数据记录被写入没有排序的数据块中。
数据排序:把装载步骤生成的大量数据块进行排序操作,并且把数据块写入磁盘。
3. 支持的文件格式
在使用FASTLOAD时候,数据源文件有很严格的规则。
FASTLOAD支持5种文件格式
1. DATA文件:使用FASTEXPORT或者BTEQ生成的数据文件。(用.export
data file=… 命令生成)。
2. INDICDATA文件:和第一种的区别在于文件包含了NULL的信息
(用.export indicdata file=…命令生成)。
3. VARTEXT文件:变长的纪录字段,每个字段之间用某个特定的字符分隔。
4. 无格式文件:需要指定某个字段的起始位置和长度,还要指定换行符的长度
(需要注意的是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))
5.二进制文件:用得比较少,这里就不介绍了。 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的“错误恢复执行”功能
如果数据在装载过程出错(数据库空间不够或者用户中止程序的执行等),在排
除错误后可以重新执行FASTLOAD脚本,如果指定了CHECKPOINT参数,数据
将在通过CHECKPOINT点处开始继续装载。如果没有指定CHECKPOINT,系统
将不知道从哪里开始是准确的,从第一条开始重新装载。
2.多次装载,这个功能非常有用,比如要装载的表的内容在2个文件中,就应
该采用该功能。如果在一个脚本中执行了BEGIN LOADING但是没有END
LOADING语句,并且没有任何错误。装载将停下来,等待用户选择装载下个一
个文件或者执行END LOADING语句。
3.如果程序在第二阶段出错,只要简单的执行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_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