因此,我试图向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‘I 81’),但没有成功。
我是不是遗漏了什么?
发布于 2017-07-26 13:41:45
您的参数顺序忽略了:从您的q.sync调用来看,x
是'instr81'
,y
是'2017.04.14'
,z
是'2017.04.14'
。
您的长度错误是因为您将n个日期的列表与长度m的字符串进行比较。
我非常肯定您的查询也会因为您的日期类型而失败--您需要发送实际日期(作为每个numpy.datetime64 D
的文献资料)而不是字符串。
您也正确地需要转换您的字符串--尽管如此,q将接收“符号”作为字符串类型,因为它尚未作为numpy.string_
类型发送。
更好的语法可能如下所示--还可以使用within
而不是date>x,date<y
来观察性能更好的Q代码--这将节省您在x之后读取所有分区,然后为date<y
进行子设置。这是如果您希望将选择包含在内-我注意到您的查询是独占的,所以在示例中的查询中,您永远不应该获得任何数据(您的start ==您的end因此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')
)
https://stackoverflow.com/questions/45328386
复制相似问题