如何使用Teradata的数据加载工具


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 ( <表示输入脚本, >表示
输入屏幕内容)
转自http://wenwen.soso.com/z/q130576676.htm

你可能感兴趣的:(SQL)