Kdb qPython函数查询
我们正在尝试使用qPython构建函数查询。使用简单示例分层,以在运行时构建where条件。 我们在我们的KDB服务器上定义了一个q函数,比如Kdb qPython函数查询,kdb,Kdb,我们正在尝试使用qPython构建函数查询。使用简单示例分层,以在运行时构建where条件。 我们在我们的KDB服务器上定义了一个q函数,比如 fn:{[c] t: (select from tbl); :?[t;c;0b;()]; } 在Python中,我们打开一个连接并发送条件 c = [['=', numpy.string_('TradeId'), 123456]] result = conn.sendSync('fn', c) 当我这样做时,在q控制台中,我看到=操作
fn:{[c]
t: (select from tbl);
:?[t;c;0b;()];
}
在Python中,我们打开一个连接并发送条件
c = [['=', numpy.string_('TradeId'), 123456]]
result = conn.sendSync('fn', c)
当我这样做时,在q控制台中,我看到=操作符为“=”。
问题是如何传递运算符您可以
值
kdb端的字符串/字符,将其从字符串/字符转换为底层kdb运算符。这在您的示例中起作用,但您可能需要一些额外的工作/测试来将其推广到所有可能发送的运算符:
q)tbl:([]TradeId:0 123456 123456 123456;col2:1 2 3 4)
q)fn:{[c] c:.[c;(::;0);value];t:(select from tbl); :?[t;c;0b;()];}
q)0(`fn;enlist("=";`TradeId;123456))
TradeId col2
------------
123456 2
123456 3
123456 4
q)0(`fn;(("=";`TradeId;123456);("in";`col2;2 4)))
TradeId col2
------------
123456 2
123456 4
注意-Im使用0()
在kdb本身内发送请求,但这应该等同于从qPython发送请求。您需要更改的位是c:[c;(:;0);值]代码>在kdb函数中@terrylyynch应答有效
对于qPython
从python发送作品
c = [[ qtype.QLambda( '{x in y}'), numpy.string_('TradeId'), [123, 456,789]]]
您的解决方案是可行的,但您能否共享运算符数组的通用形式。另外,因为我是新来Q的,你介意解释一下上面这一行是做什么的吗?如果不知道你可能使用的全部过滤器,很难概括。我上面给出的解决方案已经推广到(“kdb函数/运算符字符串”;columnName;filter)
形式的单个或多个过滤器。至于解释,点
是一个点修正(也称深度修正),(:;0)
表示数组中所有顶级项的索引零处,最后字符串上的值
返回字符串中的kdb对象