이름이 비슷해 헷갈리지만 목적이 다르다. 이름만 보고 tableDetails 를 "더 자세한 tableInfo" 로 생각하면 원하는 컬럼이 나오지 않아 한참 헤맨다.
| 액션 | 무엇을 보여 주는가 | 결과의 한 행 |
|---|---|---|
table.tableInfo |
테이블 단위 메타데이터 — 이름, 행·열 수, 인코딩, 압축 여부, 생성·수정 시각, 생성자·수정자, 승격 여부, 원본 경로 | 테이블 하나 |
table.tableDetails |
테이블이 CAS 노드에 어떻게 얹혀 있는지 — 노드, 블록 수, 매핑/비매핑 블록, 행 수, 데이터 크기 | 노드(또는 블록) 하나 |
"이 테이블을 누가 만들었나" 는 tableInfo 로 본다. tableDetails 에는 생성자 정보가 없다. 메모리 상주 현황과 노드 간 분포를 볼 때 tableDetails 를 쓴다.
proc cas;
table.tableInfo result=ti / caslib="Public";
print ti;
quit;
특정 테이블만 보려면 이름을 준다.
proc cas;
table.tableInfo / caslib="Public", name="SALES_DATA";
quit;
CASLIB 목록은 table.caslibInfo 로 얻는다. 모든 CASLIB 을 돌며 테이블 목록을 모으려면 CASL 반복문을 쓴다.
proc cas;
table.caslibInfo result=cl;
do row over cl.CASLibInfo;
table.tableInfo result=ti status=st / caslib=row.Name;
if st.severity = 0 then print row.Name, ti;
end;
quit;
status= 를 받아 확인하는 것이 중요하다. 권한이 없는 CASLIB 을 만나면 액션이 실패하는데, 받아 두지 않으면 반복문 전체가 그 자리에서 끊긴다.
proc cas;
table.tableDetails result=td / caslib="Public", name="SALES_DATA";
print td;
quit;
결과에는 노드별 블록 수와 데이터 크기가 나온다. 어떤 노드에 쏠려 있는지, 매핑되지 않은 블록이 얼마나 되는지 확인할 때 쓴다. 대용량 테이블의 메모리 압박을 진단하는 용도다.
PROC CAS 안은 SAS 매크로나 DATA 스텝이 아니라 CASL 이다. 문법이 다르다.
| 오류 메시지 | 원인 |
|---|---|
인수가 너무 적습니다 (too few arguments) |
액션 인자를 공백으로 나열했다. CASL 은 쉼표로 구분한다 — / caslib="Public", name="T1" |
결과 테이블이 필요합니다 |
print 나 딕셔너리 인덱싱을 결과 객체가 아닌 액션 호출에 직접 걸었다. 먼저 result= 로 받는다 |
| 함수를 못 찾음 | if not exists(...) 처럼 다른 언어의 관용구를 썼다. CASL 에서는 딕셔너리 키 존재 확인에 다른 방식을 쓴다 |
결과 객체는 딕셔너리다. 안에 무엇이 들어 있는지 먼저 확인하고 접근한다.
proc cas;
table.tableInfo result=ti / caslib="Public";
describe ti; /* 구조를 찍어 본다 */
print ti.TableInfo; /* 키 이름은 describe 결과에서 확인한다 */
quit;
키 이름은 릴리스와 액션에 따라 다르다. 문서나 예제를 그대로 옮기지 말고 describe 로 확인한 이름을 쓴다.
리포트를 만들려면 결과를 CAS 테이블이나 SAS 데이터셋으로 떨어뜨린다.
proc cas;
table.tableInfo result=ti / caslib="Public";
saveresult ti.TableInfo casout={name="table_inventory", caslib="casuser", replace=true};
quit;
SAS 데이터셋으로 받으려면 saveresult ... dataout= 를 쓴다.
tableInfo 가 반환하는 정확한 컬럼 이름과 tableDetails 의 컬럼 목록은 Viya 릴리스에 따라 다르다. 위 설명은 액션의 성격을 기준으로 적은 것이고, 실제 컬럼은 describe 로 확인해야 한다. (확인 필요)tableInfo 에 보이지 않는다. "모든 테이블" 을 훑는 스크립트는 전역 테이블만 잡는다는 점을 전제해야 한다. (확인 필요)