KDB查询中自定义函数如何按列处理,能否查看cor内置函数源码?
问题1:如何让自定义函数在select中按整列处理
问题原因
kdb+的select语句默认会对没有聚合属性的函数做逐行(逐元素)调用,只有带聚合属性的函数(内置的avg/cor/sum等都属于这类)才会默认接收整列作为入参。
修正方案
有两种常用方案可选:
方案1:给自定义函数添加聚合属性
给fit1函数设置a(聚合)属性,告诉kdb+这是聚合函数,执行select时会传入整列:
// 原有函数定义不变 center:{x - avg raze x} fit1:{ xc: 0^center[x]; yc: 0^center[y]; beta: raze yc lsq xc; intercept: (avg raze y) - (beta * avg raze x); raze beta } // 新增:给fit1设置聚合属性 fit1: fit1 setAttr `a
设置完成后直接执行原有查询即可得到正确结果:
q)select fit1[x;y] from t x - 3
方案2:查询时手动包裹整列入参
如果不想修改函数属性,可以在传参时用enlist包裹列,强制把整列作为单个参数传入函数:
q)select fit1[enlist x;enlist y] from t x - 3
问题2:cor函数是否公开源码
cor是kdb+的核心内置函数,属于KX公司的闭源C实现,没有对外公开源码。
内容的提问来源于stack exchange,提问作者cjm2671
相关产品推荐
相关产品推荐

