2017-07-26 110 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引發的,那麼這個查詢就有很多參數。這不是這種情況吧? –