2017-07-26 91 views
0

所以我想解雇下面的查询(同步)到KDB +:qPython qpython.qtype.QException:b'length”

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'),但没有运气。

我错过了什么吗?

回答

1

你的论点定单看上去关闭:从q.sync通话,它看起来像x'instr81'y'2017.04.14'z'2017.04.14'

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

相当确保您的查询也将失败,因为你的约会对象类型的 - 你需要发送的实际日期(如numpy.datetime64 Dthe documentation)而不是字符串。

你也需要转换你的字符串 - 因为它是正确的,因为它没有作为numpy.string_类型发送,因此q将接收字符串类型的“符号”。

更好的语法看起来像下面的 - 也观察到使用within而不是date>x,date<y的更高性能Q码 - 这会节省你在阅读X毕竟分区,然后子集化date<y。这是如果你想让你的选择包括 - 我注意到你的查询是排他性的,所以在你的例子查询中,你永远不应该得到任何数据(你的开始==你的结尾,所以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') 
) 
+0

你好!是的,我刚才注意到订单是不正确的。我会给日期的事情一试! –

+0

@HighSociety酷 - 请参阅编辑中添加的示例代码(我很偷偷摸摸) –

+0

爱你的偷偷摸摸,喜欢内功能(从来没有听说过)。现在'b'lenght'异常消失了,但是它会把'b'rank'异常替换掉。我的理解是,如果'rank'是由kdb引发的,那么这个查询就有很多参数。这不是这种情况吧? –