2017-09-26 8 views
0

Netezza UDF를 등록한 후 UDF를 사용하는 select 문이 있습니다. UDF의 instantiate 메소드가 select 문에 대해 두 번 호출된다는 것을 발견했습니다. 왜 그런가?두 번 호출되는 Netezza 7.2 UDF 인스턴스화 메서드

샘플을 선택 STMT는 :

select my_udf(somecolumn, 'some parm info') from evtest; 

나는 나를 당황하게하는, UDF에의 인스턴스화는이 선택에 대해 한 번 전화를받을 것이지만, 두 번이라고 생각합니다.

고마워요.

+0

참으로 이상합니다. SPU 당 한 번, 호스트에 한 번 또는 총 한 번만 실행될 것으로 예상했을 것입니다. _v_dual 및 _v_dual_dslice를 사용하여 호출하는 것 사이에는 어떤 차이가 있습니까? 내 기대 중 어떤 것이 사실인지 알 수 있도록 도와야합니다. (만약에 어떠한)? –

+0

다른 기술적 문제로 인해 Lars에 대한 질문에 답변 할 수 없습니다. 그러나 당신이 쓴 것은 생각에 대한 더 많은 식량을 제공해 주므로, 고맙습니다. –

+0

내 일기에 임의의 페이지와 같은 소리 :) 당신의 생각과 땜질이가 당신을 알아낼 수있게 때 실현 가능한 때 알려주십시오. –

답변

1

좋아요, 나는 수수께끼를 풀었습니다.

인스턴스 작성 메소드가 명령문 준비 중 호출되고 실제로 명령문의 작업을 수행 할 때 다시 호출됩니다.

내 추론 : 내 생성자에 logMsg stmt를 추가했는데 두 번의 호출 각각에 대해 로그 메시지가 두 개의 다른 로그 파일로 이동하는 것을 볼 수 있습니다. 이 실험은 _v_dual로 완료되지 않았지만 함께 완료되었습니다.

내 logMsg 호출 중 어느 것도 호스트에서 실행되는 사용자 정의 함수를위한 /nz/kit/log/dbos/dbos.log로 이동하지 않았습니다. 내 로그 메시지의

하나는 시스템 카탈로그 또는 내 로그 메시지의 BOTH 문 준비 시간

에서 작동하는 기능에 대한 인 /nz/kit/log/postgres/pg.log 갔다 /nz/kit/log/sysmgr/sysmgr.log (SPU에서 실행되는 기능 용)로갔습니다.

내 생각에 이것은 원래의 질문에 대한 답변입니다.

+0

나에게 완벽하게 이해합니다. jit 통계가 세 번째 호출을 수시로 트리거 할 수 있다고 가정합니다. :) –