如何在SAS Viya/CAS中查询zzz123服务器下所有表的名称与大小
如何在SAS Viya/CAS中查询指定服务器下所有表的名称和大小?
你当前使用SAS Viya/CAS环境,已通过以下命令获取到zzz123相关的caslib路径:
proc cas; table.caslibInfo; quit;
输出包含路径:
/disk/data/sas/zzz123/home1/... /disk/data/sas/zzz123/home2/... /disk/data/sas/zzz123/home3/...
你已能通过以下命令查询单表详情:
proc cas; table.tableDetails/caslib = "some name" name = "table1"; quit;
但你尝试的宏无法实现批量查询所有表的需求,因为table.tableDetails必须指定具体表名才能返回详情。以下是正确的实现方法:
正确的批量查询宏代码
%macro get_all_table_details(target_caslib); /* 1. 获取指定caslib下的所有表名列表,保存到CAS数据集 */ proc cas; table.tableInfo / caslib="&target_caslib" outcaslib="casuser" out="table_list"; quit; /* 2. 将CAS数据集加载到SAS临时库,方便后续遍历 */ proc casutil; load casdata="table_list" caslib="casuser" out=work.table_list replace; quit; /* 3. 遍历表名列表,逐个调用tableDetails获取每个表的存储信息 */ data _null_; set work.table_list; /* 生成动态执行的代码 */ call execute(cats( 'proc cas;', ' table.tableDetails / caslib="&target_caslib" name="', trim(name), '";', 'quit;' )); run; %mend; /* 调用宏:替换your_caslib_name为实际caslib名称(如对应/home1的caslib名) */ %get_all_table_details(your_caslib_name);
关键说明
- 替换
your_caslib_name为table.caslibInfo输出中对应的caslib名称(不是文件路径) - 如果需要处理多个caslib(如home1、home2、home3对应的caslib),只需多次调用宏即可
table.tableDetails返回的结果包含表大小(size字段)、行数、创建时间等存储信息,可根据需求提取保存到数据集
内容的提问来源于stack exchange,提问作者farrow90
相关产品推荐
相关产品推荐

