1
我试图使用SAS(通过SAS EG 4.3)在Teradata中从现有的sas数据集创建新表。现有的sas数据集根据需要进行排序。Proc Sql在Teradata中创建新表时不执行'order by'行
代码将正常运行且没有错误,并且在Teradata中创建了一个新表,但它不会在代码中按行执行顺序。如果我设置跟踪选项并查看sas日志中的'orderby ..'行不会显示在跟踪中。
TD表没有按需要排序,有什么想法?
问候
SAS代码
%include "$HOME/tdpp_5200.sas";
options SASTRACE=',,,d' SASTRACELOC=SASLOG MLOGIC MPRINT;
%let Teradata_db = U_DOATDB;
%let Teradata_tb = TBL_AS2_AUDIT_AGG_18MTH;
%let primary_key = 'primary index(CAT)';
libname tdata &rdbms &dbc_info database=&Teradata_db.;
libname datalib "/wload/ar3p/gpfs/teamproj/intr/Projects/AS2_CONTROL_RPT/";
proc sql;
create table tdata.&Teradata_tb. (FASTLOAD=yes dbcreate_table_opts= primary_key) as
select * from datalib.tbl_AS2_audit_agg_18mth
order by AS_YEAR, AS2_MONTH, EVENT_TYPE, RESULT_TYPE,REASON_TYPE, OPERATOR_TYPE;
Quit;
libname tdata clear;
libname datalib clear;
SAS日志
0 1475134126 trprep 0 SQL (2)
TERADATA_0: Prepared: on connection 1 1 1475134126 trprep 0 SQL (2)
SELECT * FROM U_DOATDB."TBL_AS2_AUDIT_AGG_18MTH" 2 1475134126 trprep 0 SQL (2)
3 1475134126 trprep 0 SQL (2)
TERADATA: trforc: COMMIT WORK 4 1475134126 trforc 0 SQL (2)
NOTE: SAS variable labels, formats, and lengths are not written to DBMS tables.
5 1475134132 trexec 0 SQL (2)
TERADATA_1: Executed: on connection 2 6 1475134132 trexec 0 SQL (2)
CREATE MULTISET TABLE U_DOATDB."TBL_AS2_AUDIT_AGG_18MTH" ("CAT" CHAR (200),"AS_Year" DECIMAL(11),"As2_Month"
DECIMAL(11),"EVENT_TYPE" INTEGER,"RESULT_TYPE" CHAR (1),"REASON_TYPE" INTEGER,"OPERATOR_TYPE" CHAR (8),"VOL" FLOAT) primary
index(CAT);COMMIT WORK 7 1475134132 trexec 0 SQL (2)
8 1475134132 trexec 0 SQL (2)
Teradata中的表格从不以任何可见的方式排序,它在内部按排序值排序。 – dnoeth
嗨dnoeth,感谢您的及时回复。所以看起来,添加一个order by子句是浪费而不需要的。是否有任何理由为什么该行被排除在传递给Teradata的SQL中? –
正如你所说..这是不需要的。作为传递转换过程的一部分,libname引擎将SAS SQL转换为“native sql”。 –