数据仓库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