Как присоединиться к splayed таблице в KDB?

У меня есть 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
    ]"

Но я просто получаю сообщение об ошибке (я Studio для KDB +)

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

Так каков будет правильный способ сделать такое соединение?

Кроме того, производительность и эффективность - проблема с такой большой таблицей - что я должен сделать, чтобы запрос не занимал часы и не занимал большую часть системных ресурсов сервера?

1 ответ

Решение

Вам нужно отобразить растопыренный 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/

Что касается оптимизации производительности aj см. http://code.kx.com/q/ref/joins/

Кроме того, если между днями нет перекрытия данных, может быть быстрее выполнить запрос изо дня в день, возможно, параллельно.

Если данные перекрываются по дням, объединение столбцов даты и времени в один столбец отметки времени ускорит поиск.

Другие вопросы по тегам