Запросы на момент времени в kdb

Мне часто нужно выбрать последнюю строку в секционированной таблице до определенного времени. Это то, что я использую:

select last A,last B,last C from mytable where date=2013.05.23,ts<10:30:00,A in (`Bob`Jane)

Этот запрос, вероятно, загружает все строки `Bob`Jane до 10:30:00, а затем возвращает последнюю строку. Есть ли более эффективный способ запуска запросов на определенный момент времени в kdb?

Некоторые контрольные данные для моей таблицы:

/select all data
\t t: select ...
1724i

count t
2225311i

\t select ... ts<15:00:00
2040i

\t select ... ts<12:00:00
1092i

\t select ... ts<10:00:00
521i

kdb
person Robert Kubrick    schedule 29.05.2013    source источник
comment
Предложение where не должно возвращать все строки; в худшем случае он должен создавать только список допустимых индексов. Вы видите какое-то резкое замедление с этим запросом по сравнению с тем, что вы ожидаете? Как вообще устроена эта таблица? Это все в памяти? Растянутый? Разделено?   -  person chrisaycock    schedule 29.05.2013
comment
@chrisaycock Добавил дополнительную информацию к вопросу.   -  person Robert Kubrick    schedule 29.05.2013


Ответы (2)


Другой альтернативой является использование следующего:

select A,B,C from mytable where date=2013.05.23,ts<10:30:00,A in (`Bob`Jane),i=last i

Хотя я сомневаюсь, что будет какое-либо улучшение производительности по сравнению с тем, что у вас есть сейчас.

Что более важно, так это тип таблицы (в памяти/растянутая/разделенная (включая то, как она разделена)) и используемые атрибуты (если они есть).

person user1895961    schedule 29.05.2013
comment
Это секционированная, растянутая таблица. Я добавил больше информации к вопросу. - person Robert Kubrick; 29.05.2013
comment
У вас установлены какие-либо атрибуты? - person user1895961; 29.05.2013
comment
Не то чтобы я знаю. Это секционированная таблица, проиндексированная ts. Мне нужно только запустить запрос на определенный момент времени в определенную дату. - person Robert Kubrick; 29.05.2013
comment
Использование мета даст вам представление о том, какие столбцы имеют атрибуты. Если вы действительно хотите воспользоваться всеми преимуществами kdb+, я настоятельно рекомендую использовать атрибуты если ваш набор данных достаточно велик. - person user1895961; 29.05.2013
comment
Если таблица проиндексирована ts, не может ли kdb найти последнюю строку, соответствующую запрошенной метке времени, а затем пройтись по таблице последовательно в обратном направлении, чтобы найти последнее доступное наблюдение, соответствующее условиям выбора? - person Robert Kubrick; 30.05.2013

aj предоставляет функции, которые вы ищете:

http://code.kx.com/q/ref/joins/#aj-aj0-asof-join

По предоставленной ссылке есть несколько советов по повышению производительности для aj.

person user2242865    schedule 29.05.2013
comment
ОП запрашивает запрос. asof-join создаст новую таблицу. - person chrisaycock; 29.05.2013
comment
Правильно, мне не нужно объединять данные из двух разных таблиц. Можете ли вы опубликовать пример запроса с использованием aj, я могу попробовать его сравнить. - person Robert Kubrick; 29.05.2013
comment
Вы можете построить таблицу запросов в качестве входных данных. По ссылке есть работающий пример. - person user2242865; 29.05.2013