Рассмотрим таблицу данных ohlcv:
date ticker open close high low volume exch time
-----------------------------------------------------------------------------------------------
2024.05.02 NVDA 173 173.7 173.95 173 870 NASDAQ 2024.05.02D09:15:00.000000000
2024.05.02 NVDA 173.85 173 173.85 173 2290 NASDAQ 2024.05.02D09:16:00.000000000
2024.05.02 NVDA 173.55 173.5 173.55 173.25 382 NASDAQ 2024.05.02D09:17:00.000000000
2024.05.02 NVDA 173.5 173.5 173.5 173.5 10 NASDAQ 2024.05.02D09:18:00.000000000
2024.05.02 NVDA 173.65 173.05 173.65 173.05 435 NASDAQ 2024.05.02D09:19:00.000000000
2024.05.02 NVDA 173.1 172.9 173.1 172.9 1902 NASDAQ 2024.05.02D09:20:00.000000000
2024.05.02 NVDA 172.6 172.45 172.6 172.05 824 NASDAQ 2024.05.02D09:21:00.000000000
и он отсортирован как по ticker
, так и по time
через
ohlcv: `ticker`time xasc ohlcv;
уступчивость
q)meta ohlcv
c | t f a
------| -----
date | d
ticker| s s
open | f
close | f
high | f
low | f
volume| f
exch | s
time | p
Из вышесказанного ясно, что сортируется только ticker
, а time
— нет. Однако из данных также видно, что таблица разделена и сгруппирована по столбцу ticker
, что подводит меня к моему вопросу.
Какой из этих атрибутов я хочу установить? А как насчет колонки time
? Я предполагаю, что это зависит от приложения. Если да, то какова наилучшая практика?
Некоторая документация, доступная по этому вопросу: https://code.kx.com/q/ref/set-attribute/https://code.kx.com/q4m3/8_Tables/#88-attributeshttps://www.timestored.com/kdb-guides/table-attributes
Не существует однозначного ответа, какой из них лучше, но в целом, по моему опыту:
На диске: p#, u#, s#, g# в порядке эффективности.
В памяти: s#, p#, u#, g# (хотя это не имеет особого значения для строк/элементов размером менее 1 млн.)
Несколько вещей, на которые следует обратить внимание:
Обычной практикой для вашей таблицы ohlcv
(при условии, что вы записываете ее на диск) будет:
where date=
будет первым предложением)ticker=
— следующий наиболее вероятный пункт) `ticker`time xasc table
перед его записью)
Спасибо за отличный и подробный ответ @terrylynch