【问题标题】:Netezza 7.2 UDF instantiate method called twiceNetezza 7.2 UDF 实例化方法被调用两次
【发布时间】:2017-09-29 05:02:42
【问题描述】:

注册 Netezza UDF 后,我有一个使用 UDF 的 select 语句。我发现该选择语句调用了 UDF 的实例化方法两次。知道为什么吗?

样本选择stmt:

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

我认为 udf 的实例化只会为此选择调用一次,但它被调用了两次,这让我感到困惑。

谢谢

【问题讨论】:

  • 确实很奇怪。我本来希望它在每个 SPU 上执行一次,在 HOST 上执行一次,或者总共只执行一次……用 _v_dual 和 _v_dual_dslice 调用它有什么区别……它们应该可以帮助您了解我的哪些期望是正确的(如果有的话)?
  • 由于我的其他技术问题,我无法回答您的问题 Lars。但是你写的确实给了我更多的思考,所以谢谢你。
  • 听起来像是我日记中的一个随机页面 :) 在可行的情况下让我们知道您的想法和修补可以让您弄清楚...

标签: netezza


【解决方案1】:

好的,我想我已经解开了这个谜。

我相信实例化方法在语句准备期间被调用,然后在实际执行语句的工作时再次被调用。

我的理由: 我在构造函数中添加了一个 logMsg stmt,我看到对于这两个调用中的每一个,日志消息都进入了两个不同的日志文件。这个实验不是用 _v_dual 完成的,而是用 . 完成的。

我的 logMsg 调用都没有转到 /nz/kit/log/dbos/dbos.log,它用于在主机上运行的用户定义函数。

我的日志消息中只有一条进入了/nz/kit/log/postgres/pg.log,这是针对在系统目录上或在语句准备时运行的函数的

我的两条日志消息都发送到 /nz/kit/log/sysmgr/sysmgr.log,用于在 SPU 上运行的功能。

我认为,这回答了我最初的问题。

【讨论】:

  • 对我来说非常有意义。我想 jit 统计数据可能会不时触发第三次调用 :)
猜你喜欢
  • 2021-11-04
  • 2020-03-03
  • 2013-12-31
  • 1970-01-01
  • 2020-07-16
  • 2014-09-02
  • 1970-01-01
  • 2014-05-22
  • 2015-11-01
相关资源
最近更新 更多