1

SASを使用してテーブルをロードし、インデックスを作成し、統計を収集し、teradataのテーブルにselect権限を付与して作業を完了しようとしています。SASは私が選択しなければならない唯一のソフトウェアです。

次のスクリプトは、テーブルを正常に削除し、テーブルをロードし、インデックスを作成しますが、統計を収集したり、selectを付与したりしません。これを行う別の方法はありますか、それとも私はこれを間違って行っていますか?

libname ias teradata server=<server> USER=&tduser. schema=<dbname> password=&tdpass.;

proc datasets library=ias;
   delete <tablename>;
run;

data ias.<tablename> (bulkload=yes sleep=10 tenacity=4 dbcommit=80000);
  set WORK.<data set name>;
run;

proc sql;
    connect to teradata as td (user=&tduser.  password=&tdpass. tdpid="<server>" schema="<dbname>");
    execute(create index <indexname> (<columnname>) on <dbname>.<tablename>) by td;
    execute(commit) by td;
    execute(collect statistics on <dbname>.<tablename> index (<columnname>);
    execute(commit) by td;
    execute(grant select on <dbname>.<tablename> to <list of users>) by td;
    execute(commit) by td;
disconnect from td;
run;
4

1 に答える 1

0

すべてが私にはうまく見えます。COLLECTコマンドとGRANTコマンドが機能しなかったことをどのように知っていますか?エラーメッセージが表示されましたか?

いくつかのメモ:

PROC SQL CONNECTステートメントで、オプションMODE=TERADATAを追加することをお勧めします。これにより、接続が「ANSI」モードではなく「Teradata」モードになります。その利点の1つは、コマンドが自動的に「コミット」されることです。これらの「コミット」手順は必要ありません。

また、PROC SQL CONNECTステートメントでは、SCHEMAオプションを指定しています。効果はないと思います。EXECUTEブロック内のすべては、純粋なTeradata構文である必要があるため、すべてのテーブル参照を完全に修飾します。

COLLECT STATISTICSステートメントが「index()」ではなく「index()」にあることを確認してください。

最後に、テーブルを作成するときに、DBCREATE_TABLE_OPTSおよびDBTYPEデータセットオプションを使用して、テーブルのプライマリインデックスとデータ型を明示的に定義することを強くお勧めします。

data ias.<tablename>
     (bulkload-yes sleep=10 tenacity=4
      dbcreate_table_opts='primary index(<columnname>)'
      dbtype=(  <columnname>='<teradata column definiton>'
              , <anothercolumn>='<teradata column definition>'
             ));
       set WORK.<data set name>;
run;

インデックスに明示的に名前を付けないと、SASデータセットの最初の変数がインデックスに選択され(正しい場合と正しくない場合があります)、データ型が適切でない可能性があります。

それでも問題が解決しない場合は、エラーメッセージを投稿してください。正確な例を使用してください(括弧で囲まれた参照で列名とテーブル名を非表示にしないでください)。

于 2012-06-19T15:07:29.077 に答える