我尝试使用qpython从python客户机实现多行查询。在
我想执行以下查询:
a = """
/declare a function that pivots a table on index
piv:{[t;k;p;v]f:{[v;P]`${raze "_" sv x} each string raze P,'/:v};v:(),v; k:(),k; p:(),p;G:group flip k!(t:.Q.v t)k;F:group flip p!t p;key[G]!flip(C:f[v]P:flip value flip key F)!raze{[i;j;k;x;y]a:count[x]#x 0N;a[y]:x y;b:count[x]#0b;b[y]:1b;c:a i;c[k]:first'[a[j]@'where'[b j]];c}[I[;0];I J;J:where 1<>count'[I:value G]]/:\:[t v;value F]};
/get aggregated trades table
tt:0!select last_price:last price, last_qty: last qty, low_qty: min qty by exch,sym,side,1 xbar time.second from trades
/apply pivot function on aggregated trade table
piv[`tt;`second;`exch`sym`side;`last_price`last_qty`low_qty]
"""
下面的qpython客户机只是调用远程kdb+/q服务器,以检索对上述查询的响应
^{pr2}$但是,它会引发以下“读取”错误:
qpython.qtype.QException: b'tt'
然而,在远程服务器qshell上执行的相同查询是否正确运行? 我认为这可能与反序列化过程中取消对变量的引用有关,但是我不确定这是否是由于上述客户端的错误实现或查询中的错误逻辑造成的。在
实现像上面这样的多行查询的规范方式是什么?在
可能是因为在声明变量tt的第二行末尾缺少分号,这意味着这些行将被视为一个表达式。在
当q从右向左求值时,它将运行最后一行,该行调用}。在
piv
,该行在声明之前用输入tt
调用{尝试更改第二行以包含分号
tt:0!select last_price:last price, last_qty: last qty, low_qty: min qty by exch,sym,side,1 xbar time.second from trades;
相关问题 更多 >
编程相关推荐