qPython qpython.qtype.QException: b'长度'

qPython qpython.qtype.QException: b'length'

所以我试图将以下查询(同步)触发到 kdb+:

q.sync('{select from trade where date>x,date<y, sym=z}', 'instr81', '2014.04.14', '2017.04.14')

执行时它给我 raise QException(self._read_symbol()) qpython.qtype.QException: b'length' 但我不知道它来自哪里。我尝试过其他类型,例如 numpy.string_ 或常规字节 (b'instr81') 但没有成功。

我是不是漏掉了什么?

您的参数顺序看起来不对:从您的 q.sync 调用来看,x 似乎是 'instr81'y'2017.04.14',并且 z'2017.04.14'

您的长度错误是因为您将 n 个日期的列表与长度为 m 的字符串进行比较。

漂亮确定您的查询也会因为您的日期类型而失败 - 您需要发送实际日期(如 numpy.datetime64 Dthe documentation ) 而不是字符串。

您需要转换字符串也是正确的 - 实际上,q 将接收 "symbol" 作为字符串类型,因为它尚未作为 numpy.string_ 类型发送。

更好的语法可能如下所示 - 还要观察使用 within 而不是 date>x,date<y 的更高效的 q 代码 - 这将节省你阅读 all[=36] =] 在 x 之后进行分区,然后对 date<y 进行子集化。这是如果你想让你的 select inclusive - 我注意到你的查询是排他的,所以在你的例子中的查询中,你永远不应该取回任何数据(你的开始 == 你的结束所以 0 个结果)。

> import numpy as np
> q.sync(
    '{[x;y;z]select from trade where date within(x;y),sym=z}', 
    np.datetime64('2014-04-14','D'), #start date
    np.datetime64('2014-04-14','D'), #end date
    np.string_('instr81')
 )