sas - 使用 Fast LOAD 将 SAS 数据集加载到 Teradata 表中

标签 sas teradata

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

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

任何方法都可以使用proc sql命令procappend命令。提前致谢。

最佳答案

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

/* 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 是一个方便的工具,因为如果目标表不存在,它不会产生错误。

关于sas - 使用 Fast LOAD 将 SAS 数据集加载到 Teradata 表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15722089/

相关文章:

sql - 在以表别名为前缀的字段上使用 'Calculated' 函数 - SAS SQL

sql - Teradata 中的条件总和和计数(SQL 帮助)

在 Teradata Ansi session 模式下提交

SQLl仅将where子句应用于一个字段

hadoop - 直接模式导入可用于Teradata SQOOP导入吗?

java - 从 SAS 调用 java 类。错误: Could not find class

sas - 读取SAS文件时出错

sorting - 在 SAS 中重新排序列的最有效方法

sas - 在 sas 中编辑相似值

mysql - 如何在 SQL/Teradata 中创建宏变量?