使用快速LOAD将SAS数据集加载到Teradata表中

时间:2013-03-30 18:40:51

标签: sas teradata

我正在尝试使用FASTLOAD实用程序将SAS数据集加载到teradata表中。这在某些情况下工作正常,但我想分离错误表并在teradata环境中的我自己/其他数据库中创建它们。

有人可以为我提供语法(我确实知道,但它不起作用)如何使它成为可能?

任何方法都可以使用proc sql commandproc append command。提前谢谢。

1 个答案:

答案 0 :(得分:2)

您可以使用LOGDB libname选项告诉SAS应该在哪个数据库中创建日志文件。默认情况下,它们在与正在创建的表相同的数据库中创建(命名为目标表名称加上您发现的三个字符后缀)。使用评论中提供的信息,试试这个:

/* Delete any exisiting log files for table TPT_LD_TEST */
libname TPTLOAD TERADATA 
                SERVER=TDServ DATABASE=TPTLOAD 
                USER=tduser PASSWORD=tdpasswd1
                ;
proc delete data=TPTLOAD.TPT_LD_TEST_ET;
run;
proc delete data=TPTLOAD.TPT_LD_TEST_UV;
run;
proc delete data=TPTLOAD.TPT_LD_TEST_RS;
run;
libname TPTLOAD clear;

/* Define connection to target database */
LIBNAME TDSERV  TERADATA 
                SERVER=TDServ 
                USER=tduser PASSWORD=tdpasswd1
                LOGDB=TPTLOAD;

/* Truncate target table if necessary */
proc sql noprint;
   delete from TDSERV.TPT_LD_TEST;
quit;

proc append base=TDSERV.TPT_LD_TEST(fastload=yes tpt=yes)
            data=work.FastLoad;
run;

我添加了一些代码来删除目标表中的任何现有行(FASTLOAD的要求)。

如果您对目标数据库拥有DROP TABLECREATE TABLE权限,则删除并重新创建表可能更安全,这样您就可以保证结构并明确命名表索引。

/* Delete target table if it exists */
proc delete data=TDSERV.TPT_LD_TEST;
run;

data TDSERV.TPT_LD_TEST 
            (fastload=yes tpt=yes
             dbcreate_table_opts='primary index(index_column_name)'
            )
   set work.FastLoad;
run;

在任何一种情况下,请务必从源数据集中删除任何重复记录;这些将写入您的错误文件(以及任何其他约束失败的记录)。

PROC DELETE是一个方便的设备,因为如果目标表不存在,它将不会产生错误。