2016-09-29 17 views
1

SAS(SAS EG 4.3経由)を使用して、既存のsasデータセットからTeradataで新しいテーブルを作成しようとしています。既存のsasデータセットは必要に応じてソートされます。Teradataで新しいテーブルを作成するときにProc Sqlが '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をパススルー変換プロセスの一部として「ネイティブSQL」に変換します。 –

答えて

1

のTeradataにコードを渡すときにSASがORDER BY条項を削除したので、Teradataのは、テーブル内のデータの順序付けをサポートしていません。さもなければコードは失敗したでしょう。

データを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; 
関連する問題