【问题标题】:qPython qpython.qtype.QException: b'length'qPython qpython.qtype.QException: b'length'
【发布时间】:2017-07-26 13:26:55
【问题描述】:

所以我正在尝试将以下查询(同步)触发到 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'),但没有运气。

我错过了什么吗?

【问题讨论】:

    标签: python kdb qpython


    【解决方案1】:

    您的参数顺序看起来不正确:从您的 q.sync 调用看来,x'instr81'y'2017.04.14'z'2017.04.14'

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

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

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

    更好的语法可能如下所示 - 还可以使用 within 而不是 date>x,date<y 观察性能更高的 q 代码 - 这将节省您在 x 之后的 all 分区中的阅读,然后为date<y。这是如果您希望选择 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')
     )
    

    【讨论】:

    • 您好!是的,我刚才注意到订单不正确。我会试试约会的事情!
    • @HighSociety 很酷 - 请参阅编辑中添加的示例代码(我就是这样偷偷摸摸的)
    • 爱你的鬼鬼祟祟,爱里面的功能(从未听说过)。 b'lenght 异常现在已经消失,但它与 b'rank 异常交换了位置。我的理解是,如果 kdb 提高了“等级”,则查询的参数很多。这不是这里的情况吧?
    • PS:你可能已经注意到了,我对 kdb 完全没有经验 :-)
    • 哈——这不是一件容易掌握的事情!是的,我的测试只是抛出了同样的“排名异常”。将函数修改为 {[x;y;z][...] 并且它可以工作 - 想知道这是否不仅仅是 qPython 的一个怪癖
    猜你喜欢
    • 2016-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-22
    • 2016-02-24
    相关资源
    最近更新 更多