我正在尝试加载表,创建索引,收集统计信息,使用SAS为teradata中的表授予选择权限以完成工作。 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;
答案 0 :(得分:0)
一切看起来都不错。你怎么知道COLLECT和GRANT命令不起作用?您收到错误消息了吗?
一对夫妇注意到:
在PROC SQL CONNECT语句中,我建议你添加选项MODE = TERADATA;将连接置于“Teradata”而不是“ANSI”模式,其中一个好处是命令自动“提交”;你不需要那些“提交”步骤。
同样在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数据集中的第一个变量(可能正确也可能不正确),并且数据类型可能不合适。
如果您仍有问题,请回复任何错误消息;请使用一个确切的例子(不要用括号内的引用隐藏列和表名)。