Q Language - Tabelle su disco
I dati sul disco rigido (chiamato anche database storico) possono essere salvati in tre diversi formati: file flat, tabelle splayed e tabelle partizionate. Qui impareremo come utilizzare questi tre formati per salvare i dati.
Archivio base
I file flat vengono caricati completamente in memoria, motivo per cui la loro dimensione (footprint di memoria) dovrebbe essere piccola. Le tabelle vengono salvate su disco interamente in un file (quindi le dimensioni contano).
Le funzioni utilizzate per manipolare queste tabelle sono set/get -
`:path_to_file/filename set tablename
Facciamo un esempio per dimostrare come funziona:
q)tables `.
`s#`t`tab`tab1
q)`:c:/q/w32/tab1_test set tab1
`:c:/q/w32/tab1_test
In ambiente Windows, i file flat vengono salvati nella posizione: C:\q\w32
Ottieni il file flat dal tuo disco (db storico) e usa l'estensione get comando come segue -
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
Viene creata una nuova tabella tab2 con il suo contenuto memorizzato in tab1_test file.
Tabelle divaricate
Se ci sono troppe colonne in una tabella, memorizziamo tali tabelle in un formato aperto, ovvero le salviamo su disco in una directory. All'interno della directory, ogni colonna viene salvata in un file separato con lo stesso nome del nome della colonna. Ogni colonna viene salvata come un elenco del tipo corrispondente in un file binario kdb +.
Il salvataggio di una tabella in formato aperto è molto utile quando dobbiamo accedere frequentemente solo a poche colonne dalle sue numerose colonne. Una directory di tabella visualizzata contiene.d file binario che contiene l'ordine delle colonne.
Proprio come un file flat, una tabella può essere salvata come visualizzata utilizzando l'estensione setcomando. Per salvare una tabella come visualizzata, il percorso del file dovrebbe terminare con una barra rovesciata -
`:path_to_filename/filename/ set tablename
Per leggere una tabella allargata, possiamo usare il get funzione -
tablename: get `:path_to_file/filename
Note - Affinché una tabella venga salvata come visualizzata, dovrebbe essere senza chiave ed enumerata.
In ambiente Windows, la struttura del file apparirà come segue:
Tabelle partizionate
Le tabelle partizionate forniscono un mezzo efficiente per gestire tabelle enormi contenenti volumi significativi di dati. Le tabelle partizionate sono tabelle distribuite su più partizioni (directory).
All'interno di ogni partizione, una tabella avrà la propria directory, con la struttura di una tabella visualizzata. Le tabelle potrebbero essere suddivise su base giorno / mese / anno per fornire un accesso ottimizzato al suo contenuto.
Per ottenere il contenuto di una tabella partizionata, utilizzare il seguente blocco di codice:
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 ….
Proviamo a ottenere il contenuto di una tabella commerciale -
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 - La modalità partizionata è adatta per tabelle con milioni di record al giorno (cioè dati di serie temporali)
File Sym
Il file sym è un file binario kdb + contenente l'elenco dei simboli da tutte le tabelle splay e partizionate. Può essere letto con,
get `:sym
file par.txt (opzionale)
Questo è un file di configurazione, utilizzato quando le partizioni sono distribuite su più directory / unità disco e contengono i percorsi delle partizioni del disco.