2016-09-29 69 views
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) 
+3

Teradata中的表格从不以任何可见的方式排序,它在内部按排序值排序。 – dnoeth

+0

嗨dnoeth,感谢您的及时回复。所以看起来,添加一个order by子句是浪费而不需要的。是否有任何理由为什么该行被排除在传递给Teradata的SQL中? –

+0

正如你所说..这是不需要的。作为传递转换过程的一部分,libname引擎将SAS SQL转换为“native sql”。 –

回答

1

Teradata的不支持数据的排序在表中,代码传递给Teradata的时所以SAS除去ORDER BY子句。否则代码将失败。

将数据读回SAS时,您可以在BY语句中使用任何想要的变量,并且SAS会告诉Teradata在离开表格时排序数据。

proc print data=datalib.tbl_AS2_audit_agg_18mth; 
    by AS_YEAR AS2_MONTH EVENT_TYPE RESULT_TYPE REASON_TYPE OPERATOR_TYPE; 
run;