Język Q - tabele na dysku
Dane na dysku twardym (zwane również historyczną bazą danych) można zapisać w trzech różnych formatach - pliki płaskie, tabele podzielone i tabele podzielone na partycje. Tutaj dowiemy się, jak używać tych trzech formatów do zapisywania danych.
Plik płaski
Płaskie pliki są w pełni ładowane do pamięci, dlatego ich rozmiar (zużycie pamięci) powinien być niewielki. Tabele są zapisywane na dysku w całości w jednym pliku (więc rozmiar ma znaczenie).
Funkcje używane do manipulowania tymi tabelami to set/get -
`:path_to_file/filename set tablename 
    Weźmy przykład, aby pokazać, jak to działa -
q)tables `.
`s#`t`tab`tab1 
q)`:c:/q/w32/tab1_test set tab1
`:c:/q/w32/tab1_test 
    W środowisku Windows płaskie pliki są zapisywane w lokalizacji - C:\q\w32
                Pobierz płaski plik z dysku (historyczna baza danych) i użyj rozszerzenia get polecenie w następujący sposób -
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 
    Tworzona jest nowa tabela tab2 z zawartością przechowywaną w tab1_test plik.
Tabele rozłożone
Jeśli w tabeli jest za dużo kolumn, to przechowujemy takie tabele w formacie splay, czyli zapisujemy je na dysku w katalogu. W katalogu każda kolumna jest zapisywana w oddzielnym pliku pod tą samą nazwą co nazwa kolumny. Każda kolumna jest zapisywana jako lista odpowiedniego typu w pliku binarnym kdb +.
Zapisywanie tabeli w formacie rozłożonym jest bardzo przydatne, gdy musimy często uzyskiwać dostęp tylko do kilku kolumn z wielu kolumn. Katalog podzielonej tabeli zawiera.d plik binarny zawierający kolejność kolumn.
Podobnie jak w przypadku pliku płaskiego, tabelę można zapisać jako rozłożoną przy użyciu rozszerzenia setKomenda. Aby zapisać tabelę jako rozłożoną, ścieżka pliku powinna kończyć się znakiem luzu -
`:path_to_filename/filename/ set tablename 
    Do czytania rozłożonej tabeli możemy użyć get funkcja -
tablename: get `:path_to_file/filename 
    Note - Aby tabela została zapisana jako rozłożona, powinna być pozbawiona klucza i wyliczona.
W środowisku Windows struktura plików będzie wyglądać następująco -
                Tabele podzielone
Tabele podzielone na partycje zapewniają skuteczny sposób zarządzania ogromnymi tabelami zawierającymi znaczne ilości danych. Tabele podzielone na partycje to tabele podzielone na więcej partycji (katalogów).
Wewnątrz każdej partycji tabela będzie miała własny katalog o strukturze tabeli podzielonej. Tabele można podzielić na dzień / miesiąc / rok, aby zapewnić optymalny dostęp do ich zawartości.
Aby uzyskać zawartość tabeli podzielonej na partycje, użyj następującego bloku kodu -
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 …. 
    Spróbujmy uzyskać zawartość tabeli handlowej -
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 
    Note - Tryb partycjonowany jest odpowiedni dla tabel z milionami rekordów dziennie (tj. Dane szeregów czasowych)
Plik sym
Plik sym jest plikiem binarnym kdb + zawierającym listę symboli ze wszystkich podzielonych i partycjonowanych tabel. Można go czytać,
get `:sym 
    plik par.txt (opcjonalnie)
Jest to plik konfiguracyjny używany, gdy partycje są rozmieszczone w kilku katalogach / dyskach i zawierają ścieżki do partycji dyskowych.