2013-05-29 3 views
2

Мне часто приходится выбирать последнюю строку в многораздельной таблице, до определенного времени. Это то, что я использую:Запросы времени во времени 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 
+0

Предложение 'where' не должно возвращать все строки; в худшем случае он должен только составить список действительных индексов. Вы видите резкое замедление с этим запросом по сравнению с тем, что вы ожидаете? Как эта таблица структурирована в любом случае? Все ли в памяти? Распущенные? Разделенный? – chrisaycock

+0

@chrisaycock Добавлена ​​дополнительная информация к вопросу. –

ответ

1

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

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

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

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

+0

Это раздробленная, распущенная таблица. Я добавил дополнительную информацию к этому вопросу. –

+0

Есть ли у вас какие-либо атрибуты? – user1895961

+0

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

1

aj обеспечивает функциональные возможности, которые вы ищете:

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

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

+0

ОП запрашивает запрос. В asof-join будет создана новая таблица. – chrisaycock

+0

Правильно, мне не нужно объединять данные из двух разных таблиц. Можете ли вы разместить пример запроса с помощью aj, я могу попытаться сравнить его. –

+0

Вы можете построить таблицу запросов в качестве входных данных. В ссылке есть действующий пример. – user2242865

Смежные вопросы