2

FASTLOAD ユーティリティを使用して、SAS データセットを teradata テーブルにロードしようとしています。これでうまくいく場合もありますが、エラー テーブルを分離して、teradata 環境の自分のデータベースまたは他のデータベースに作成したいと考えています。

それを可能にする方法について、誰かが私に構文を提供してくれますか(私はそれを知っていますが、機能していません)?

proc sql commandまたはを使用しても、どの方法でも問題ありませんproc append command。前もって感謝します。

4

1 に答える 1

2

libname オプションを使用してLOGDB、ログ ファイルを作成するデータベースを SAS に指示できます。デフォルトでは、それらは作成中のテーブルと同じデータベースに作成されます (名前付きのターゲット テーブルに加えて、発見した 3 文字のサフィックスとして名前が付けられます)。コメントで提供された情報を使用して、これを試してください。

/* 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対象のテーブルが存在しなくてもエラーにならない便利なデバイスです。

于 2013-03-31T14:44:59.677 に答える