2017-09-26 85 views
0

在我註冊Netezza UDF後,我有一個使用UDF的select語句。我發現UDF的實例化方法被調用兩次select語句。任何想法爲什麼?Netezza 7.2 UDF實例化方法被調用兩次

採樣選擇語句:

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

我會認爲UDF的實例化只會得到此選擇調用一次,但它的叫了兩聲,這令我感到困惑。

感謝

+0

的確很奇怪。我預計它會被執行一次SPU,一次在主機上,或者一次只執行一次......用_v_dual和_v_dual_dslice調用它們有什麼區別......它們應該可以幫助你看到我的期望是真的(如果有的話)? –

+0

由於我的其他技術問題,我無法回答你的問題拉爾斯。但是你寫的東西給了我更多的思考,所以謝謝你。 –

+0

聽起來像在我的日記隨機頁:)讓我們知道,如果可行你的想法和修補程序可以讓你弄清楚... –

回答

1

OK,我想我已經解決了這個謎。

我相信實例化方法在語句準備期間被調用,然後在實際執行語句的工作時再次調用。

我的推理: 我添加了一個logMsg stmt到我的構造函數中,並且我看到對於這兩個調用中的每一個,日誌消息都轉到了兩個不同的日誌文件。這個實驗並沒有使用_v_dual完成,但是完成了。

我的logMsg調用都沒有轉到/nz/kit/log/dbos/dbos.log,這是用於在主機上運行的用戶定義的函數。

只有我的日誌消息的人去/nz/kit/log/postgres/pg.log,這對於在系統目錄或聲明的準備時間

我的兩個日誌消息的操作功能去了 /nz/kit/log/sysmgr/sysmgr.log,這是在SPU上運行的功能。

這,我認爲,回答我原來的問題。

+0

對我來說是完美的感覺。我想jit的統計數據會不時觸發第三次調用:) –