Данные на вашем жестком диске (также называемом исторической базой данных) могут быть сохранены в трех различных форматах — плоские файлы, разбитые таблицы и секционированные таблицы. Здесь мы узнаем, как использовать эти три формата для сохранения данных.
Плоский файл
Плоские файлы полностью загружаются в память, поэтому их размер (объем памяти) должен быть небольшим. Таблицы сохраняются на диске целиком в одном файле (поэтому размер имеет значение).
Функции, используемые для управления этими таблицами, устанавливаются / получают —
`:path_to_file/filename set tablename
Давайте рассмотрим пример, чтобы продемонстрировать, как это работает.
q)tables `. `s#`t`tab`tab1 q)`:c:/q/w32/tab1_test set tab1 `:c:/q/w32/tab1_test
В среде Windows плоские файлы сохраняются в расположении — C: \ q \ w32
Получите плоский файл с вашего диска (исторический дБ) и используйте команду get следующим образом:
q)tab2: get `:c:/q/w32/tab1_test q)tab2 sym | time price size --------- | ------------------------------- APPLE | 11:16:39.779 8.388858 12 MSFT | 11:16:39.779 19.59907 10 IBM | 11:16:39.779 37.5638 1 SAMSUNG | 11:16:39.779 61.37452 90 APPLE | 11:16:39.779 52.94808 73
Создается новая таблица tab2, содержимое которой хранится в файле tab1_test .
Таблицы с растяжкой
Если в таблице слишком много столбцов, мы храним такие таблицы в расширенном формате, т.е. сохраняем их на диске в каталоге. Внутри каталога каждый столбец сохраняется в отдельном файле под тем же именем, что и имя столбца. Каждый столбец сохраняется в виде списка соответствующего типа в двоичном файле kdb +.
Сохранение таблицы в расширенном формате очень полезно, когда нам приходится часто обращаться только к нескольким столбцам из множества столбцов. Каталог с развернутой таблицей содержит двоичный файл .d, который содержит порядок столбцов.
Подобно плоскому файлу, таблица может быть сохранена как развернутая с помощью команды set . Чтобы сохранить таблицу как развернутую, путь к файлу должен заканчиваться отрицательной реакцией —
`:path_to_filename/filename/ set tablename
Для чтения развернутой таблицы мы можем использовать функцию get —
tablename: get `:path_to_file/filename
Примечание. Чтобы таблица сохранялась как развернутая, она должна быть разблокирована и перечислена.
В среде Windows ваша файловая структура будет выглядеть следующим образом:
Разделенные таблицы
Секционированные таблицы предоставляют эффективные средства для управления огромными таблицами, содержащими значительные объемы данных. Разделенные таблицы — это расширенные таблицы, распределенные по нескольким разделам (каталогам).
Внутри каждого раздела таблица будет иметь свой собственный каталог со структурой развернутой таблицы. Таблицы могут быть разделены на день / месяц / год, чтобы обеспечить оптимизированный доступ к его контенту.
Чтобы получить содержимое секционированной таблицы, используйте следующий блок кода —
q)get `:c:/q/data/2000.01.13 // “get” command used, sample folder quote| +`sym`time`bid`ask`bsize`asize`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0 0 0 0…. trade| +`sym`time`price`size`ex!(`p#`sym!0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ….
Давайте попробуем получить содержимое торговой таблицы —
q)get `:c:/q/data/2000.01.13/trade sym time price size ex -------------------------------------------------- 0 09:30:00.496 0.4092016 7 T 0 09:30:00.501 1.428629 4 N 0 09:30:00.707 0.5647834 6 T 0 09:30:00.781 1.590509 5 T 0 09:30:00.848 2.242627 3 A 0 09:30:00.860 2.277041 8 T 0 09:30:00.931 0.8044885 8 A 0 09:30:01.197 1.344031 2 A 0 09:30:01.337 1.875 3 A 0 09:30:01.399 2.187723 7 A
Примечание. Режим секционирования подходит для таблиц с миллионами записей в день (т. Е. Данные временных рядов).
Sym файл
Файл sym — это двоичный файл kdb +, содержащий список символов из всех таблиц с разделениями и секциями. Это можно прочитать с,
get `:sym
файл par.txt (необязательно)
Это файл конфигурации, используемый, когда разделы распределены по нескольким каталогам / дискам, и содержит пути к разделам диска.