포스팅 목차
SAS상 에서 오라클 PARALLE 힌트 적용하여서 DB Insert 작업 수행하기
proc sql을 사용하여서 Inert/delete 오라클 명령어를 직접 수행 할 수 있는데, 이 경우 오라클 Hint를 함께 적용하기 위하여 "PRESERVE_COMMENTS" 옵션을 지정해야 하고, execute by oracle 방식으로 오라클 명령어를 전달해야 한다. 과거의 execute ( ) by oralce; 방식으로는 Hint가 전달이 안됨.
( 오라클 상에서 insert / delete 작업을 수행하면서 parallel 방식으로 수행하기 위하여 Alter session으로 옵션을 변경해주어야 합니다. 이 부분의 상세한 구글신을 통하여 확인하시기를 바랍니다.)
proc sql;
connect to oracle(user="&REAL_USER" orapw="&REAL_PASS" path="&REAL_PATH" PRESERVE_COMMENTS ADJUST_BYTE_SEMANTIC_COLUMN_LENGTHS=no DBCLIENT_MAX_BYTES=1 BUFFSIZE=10000);
%put &sqlxmsg;
execute by oracle (ALTER SESSION ENABLE PARALLEL DML) ;
execute by oracle (ALTER SESSION SET DB_FILE_MULTIBLOCK_READ_COUNT = 512) ;
execute by oracle (ALTER TABLE EISPART.STATSAS NOLOGGING) ;
execute by oracle
( INSERT /*+ append parallel(s,10) nologging */ INTO AP_EDQF03 s /* 현재 로딩 건수가 적어서 이 부분 Parallel 옵션을 필요 없음 */
SELECT /*+ FULL(A) PARALLEL(A,8) */
TO_CHAR(SYSDATE,'YYYYMM') AS MAG_YMD ,
'CONTRACT' AS OWNER_NM ,
'TGF636' AS TABLE_NM ,
'DMB_LHE' AS VARIABLE_NM ,
'DQ_CONDITION02' AS CHECK_VARS ,
'AC0101' AS CHECK_ITEM ,
COUNT(*) AS DQ_TAR_CNT ,
SUM(CASE WHEN DMB_LHS > DMB_LHE THEN 1 ELSE 0 END) AS DQ_RESULT ,
TO_CHAR(SYSDATE,'YYYYMMDD') AS INPUT_DT ,
TO_CHAR(SYSDATE,'HH24MISS') AS INPUT_TIME
FROM 대용량테이블 A
WHERE A.MAG_YMD >= TO_CHAR(SYSDATE - 30 * 3,'YYYYMMDD')
) ;
execute by oracle (alter session disable parallel dml) ;
execute by oracle(alter table AP_EDQF03 logging noparallel) ;
execute by oracle (COMMIT) ;
%put &sqlxmsg;
disconnect from oracle;
quit;
반응형
'SAS > SAS Tip's' 카테고리의 다른 글
[파일 Import] 외부 파일 로딩 후 SAS에서 변수명 변경하기 (0) | 2021.10.15 |
---|---|
[파일 출력] File 구문으로 텍스트 파일 출력시 인코딩(Encoding) 지정 (0) | 2021.10.14 |
무료 온라인 SAS 사용하기 – 일반 개인 사용 가능 (SAS 제공 클라우드 환경) (0) | 2021.05.06 |
[SAS TIP] 동일 관측치에서 변수간의 순위(RANK) 구하기 (0) | 2019.01.08 |
Merry Christmas and a Happy New Year (0) | 2018.12.19 |
댓글