문제

다음 SAS 명령을 실행하고 있습니다.

Proc SQL;
Delete From Server003.CustomerList;
Quit;

8 분 이상 걸립니다 ... 해당 파일을 읽는 데 몇 초 밖에 걸리지 않습니다. 삭제가 너무 오래 걸릴 수있는 것은 무엇이며 더 빨리 갈 수 있도록 무엇을 할 수 있습니까?

(테이블을 떨어 뜨리는 데 액세스 할 수 없으므로 모든 행만 삭제할 수 있습니다)

감사,

편집 : 나는 또한 테이블을 자울 수 없습니다.

도움이 되었습니까?

해결책

이것은 일반 SQL이 아닙니다. SAS의 Proc SQL은 Truncate 문을 지원하지 않습니다. 이상적으로, 당신은 delete from; 그러나 실제로 필요한 것이 기능적 기능이라면 항상 순수한 SA를 사용하고 SQL을 전혀 엉망으로 만들 수 없습니다.

data Server003.CustomerList;
set Server003.CustomerList (obs=0);
run;

이것은 효과적으로 수행하고 작동합니다 Truncate 일 것이다. 데이터 세트/테이블 구조를 유지하지만 데이터로 채우지 못합니다 (OBS = 옵션으로 인해).

다른 팁

이 테이블에 외국 열쇠가있는 다른 테이블이 많이 있습니까? 해당 테이블이 외국 키 열에 인덱스가없는 경우 SQL이 외부 키에 실제로 값이없는 경우에도 행을 삭제하는 것이 안전한지 여부를 결정하는 데 시간이 걸릴 수 있습니다. 열 (들).

또한 SAS Proc SQL에서 일반적인 SQL 명령이 느리게 실행된다고 언급합니다. 최근에 나는 프로젝트를 수행하고 SAS 내부에 그것들을 갖고 SQL Optimizer와 주변 실행 쉘에 의해 처리되는 형벌을 피하기 위해 Truncate 테이블 명령문을 저장 절차로 옮겼습니다. 결국 이것은 자르기 테이블의 성능을 크게 증가시켰다.

디스크 쓰기가 일반적으로 읽기보다 느리기 때문에 느리게 될 수 있습니다.

떨어지거나 잘리지 않고 주변의 방법에 관해서는 좋은 질문입니다! :)

이것을 당신에게 추가하십시오 LIBNAME 성명:

DIRECT_EXE=DELETE 

에 따르면 SAS/ACCESS (R) 9.2 관계형 데이터베이스 : 참조,

SAS 전체 결과 세트를 읽고 한 번에 한 행을 삭제하는 대신 SQL Delete 문이 DBMS로 직접 전달되므로 Direct_exe =를 사용하여 성능이 크게 향상됩니다.

우아함을 고려할 수도 있습니다.

Proc SQL; libname.tablename과 같은 테이블 libname.tablename을 작성합니다. 그만두다;

이전 테이블의 동일한 이름과 동일한 메타 데이터를 가진 새 테이블을 생성하고 동일한 작업에서 이전 테이블을 삭제합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top