Q Dili - Diskteki Tablolar

Sabit diskinizdeki veriler (tarihsel veritabanı da denir) üç farklı formatta kaydedilebilir - Düz Dosyalar, Yayılmış Tablolar ve Bölümlenmiş Tablolar. Burada, verileri kaydetmek için bu üç formatı nasıl kullanacağımızı öğreneceğiz.

Düz bir dosya

Düz dosyalar belleğe tam olarak yüklenir, bu nedenle boyutları (bellek ayak izi) küçük olmalıdır. Tablolar tamamen tek bir dosyada diske kaydedilir (bu nedenle boyut önemlidir).

Bu tabloları değiştirmek için kullanılan işlevler set/get -

`:path_to_file/filename set tablename

Nasıl çalıştığını göstermek için bir örnek alalım -

q)tables `.
`s#`t`tab`tab1 

q)`:c:/q/w32/tab1_test set tab1
`:c:/q/w32/tab1_test

Windows ortamında, düz dosyalar konuma kaydedilir - C:\q\w32

Düz dosyayı diskinizden (tarihsel db) alın ve get aşağıdaki gibi komut -

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

Yeni bir tablo oluşturuldu tab2 içeriği depolanmış tab1_test dosya.

Yayılı Tablolar

Tabloda çok fazla sütun varsa, bu tür tabloları yayılmış biçimde saklarız, yani onları bir dizine diske kaydederiz. Dizinin içinde, her sütun, sütun adıyla aynı adla ayrı bir dosyaya kaydedilir. Her sütun, bir kdb + ikili dosyasında karşılık gelen türlerin bir listesi olarak kaydedilir.

Bir tabloyu yayvan biçimde kaydetmek, birçok sütunundan yalnızca birkaç sütuna sıklıkla erişmemiz gerektiğinde çok kullanışlıdır. Yayılmış bir tablo dizini şunları içerir:.d sütunların sırasını içeren ikili dosya.

Düz bir dosyaya çok benzer şekilde, bir tablo aşağıdaki şekilde kaydedilebilir: setkomut. Bir tabloyu yayvan olarak kaydetmek için, dosya yolu bir boşlukla bitmelidir -

`:path_to_filename/filename/ set tablename

Yayılmış bir tabloyu okumak için, get işlev -

tablename: get `:path_to_file/filename

Note - Bir tablonun açık olarak kaydedilebilmesi için anahtarsız ve numaralandırılmış olması gerekir.

Windows ortamında dosya yapınız aşağıdaki gibi görünecektir -

Bölümlenmiş Tablolar

Bölümlendirilmiş tablolar, önemli miktarda veri içeren devasa tabloları yönetmek için etkili bir araç sağlar. Bölümlenmiş tablolar, daha fazla bölüme (dizinler) yayılmış yayılmış tablolardır.

Her bölümün içinde, bir tablonun, yayılmış bir tablonun yapısıyla birlikte kendi dizini olacaktır. Tablolar, içeriğine optimize edilmiş erişim sağlamak için gün / ay / yıl temelinde bölünebilir.

Bölümlenmiş bir tablonun içeriğini almak için aşağıdaki kod bloğunu kullanın -

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 ….

Bir ticaret tablosunun içeriğini almaya çalışalım -

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 - Bölümlenmiş mod, günde milyonlarca kayıt içeren tablolar için uygundur (yani, zaman serisi verileri)

Sym dosyası

Sym dosyası, tüm yayılmış ve bölümlenmiş tablolardan sembollerin listesini içeren bir kdb + ikili dosyasıdır. İle okunabilir,

get `:sym

par.txt dosyası (isteğe bağlı)

Bu, bölümler birkaç dizine / disk sürücüsüne yayıldığında kullanılan ve disk bölümlerinin yollarını içeren bir yapılandırma dosyasıdır.