1

我有 2 个非常大(数十亿行)的张开表,Trades并且StockPrices在远程服务器上。我想做一个 asof 加入

h:hopen `:RemoteServer:Port
h"aj[`Stock`Date`Time,
        select from Trades where Date within 2014.04.01 2014.04.13,
        StockPrices
    ]"

但我只是得到了错误(我是KDB+ 的 Studio

An error occurred during execution of the query.
The server sent the response:
splay
Studio Hint: Possibly this error refers to nyi op on splayed table

那么进行这种加入的正确方法是什么?

此外,对于这么大的表,性能和效率也是一个问题——我应该怎么做才能确保查询不会花费数小时并且不会消耗服务器的大部分系统资源?

4

1 回答 1

4

您需要将张开的StockPrices表格映射到内存中。这可以通过使用select查询来完成:

q)(`::6060)"aj[`sym`time;select from trade;quote]"                      / bad
   'splay
q)(`::6060)"aj[`sym`time;select from trade;select from quote]"          / good
   sym time         prx      bid      ask
   -------------------------------------------
   aea 01:01:16.347 637.7554 866.0131 328.1476
   aea 01:59:14.108 819.5301 115.053  208.1114
   aea 02:42:44.724 69.38325 641.8554 333.3092

此页面可能有助于从 Kdb+ 中查找错误:http: //code.kx.com/q/ref/error-list/

关于优化性能ajhttp://code.kx.com/q/ref/joins/#aj-aj0-asof-join

此外,如果几天之间没有数据重叠,那么每天运行查询可能会更快,可能并行运行。

如果跨天的数据重叠,将日期和时间列组合成一个时间戳列将加快查找速度。

于 2014-04-14T06:10:26.387 回答