我正在尝试使用 FASTLOAD 实用程序将 SAS 数据集加载到 teradata 表中。这在某些情况下可以正常工作,但我想分离错误表并在我自己/其他数据库中的 teradata 环境中创建它们。
有人可以为我提供如何使其成为可能的语法(我知道但它不起作用)吗?
任何方法都可以使用proc sql command
或proc append command
。提前致谢。
您可以使用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 TABLE
和CREATE 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
是一个方便的设备,因为如果目标表不存在,它不会产生错误。