Q Dili - Nitelikler

Bir tablonun listeleri, sözlükleri veya sütunlarına uygulanan öznitelikler olabilir. Nitelikler, listeye belirli özellikleri empoze eder. Bazı özellikler, değişiklik sırasında kaybolabilir.

Öznitelik Türleri

Sıralanmış ("s #)

`s #, listenin artan sırada sıralandığı anlamına gelir. Bir liste açıkça asc (veya xasc) ile sıralanırsa, liste otomatik olarak sıralanmış öznitelik kümesine sahip olacaktır.

q)L1: asc 40 30 20 50 9 4

q)L1
`s#4 9 20 30 40 50

Sıralanacağı bilinen bir listenin özniteliği de açıkça belirtilebilir. Q listenin sıralanıp sıralanmadığını kontrol edecek ve değilse, s-fail hata atılacak.

q)L2:30 40 24 30 2

q)`s#L2
's-fail

Sıralanan öznitelik, sıralanmamış bir ekleme üzerine kaybolacaktır.

Ayrılmış (`p #)

`p #, listenin bölünmüş olduğu ve aynı öğelerin bitişik olarak depolandığı anlamına gelir.

Aralık bir int veya temporal type Yıllar, aylar, günler vb. gibi temel bir int değerine sahip olmak. Ayrıca numaralandırılması koşuluyla bir sembol üzerinde bölümleme yapabilirsiniz.

Parted niteliğinin uygulanması, her benzersiz çıktı değerini ilk oluşumunun konumuna eşleyen bir dizin sözlüğü oluşturur. Bir liste bölündüğünde, doğrusal aramanın yerini hashtable arama aldığından arama çok daha hızlıdır.

q)L:`p# 99 88 77 1 2 3

q)L
`p#99 88 77 1 2 3

q)L,:3

q)L
99 88 77 1 2 3 3

Note −

  • Parted özniteliği, işlem bölümlemeyi koruyor olsa bile listedeki bir işlem altında korunmaz.

  • Bölümlü nitelik, varlıkların sayısı bir milyara ulaştığında ve bölümlerin çoğu önemli boyutta olduğunda, yani önemli bir tekrar olduğunda dikkate alınmalıdır.

Gruplanmış ("g #)

`g #, listenin gruplandırıldığı anlamına gelir. Her benzersiz öğeyi kendi dizinlerinin her birine eşleyen ve önemli miktarda depolama alanı gerektiren bir dahili sözlük oluşturulur ve korunur. Uzunluk listesi içinL kapsamak u benzersiz boyutta öğeler s, Bu olacak (L × 4) + (u × s) bayt.

Gruplama, yapısı hakkında başka hiçbir varsayımda bulunulamadığında bir listeye uygulanabilir.

Öznitelik, yazılı herhangi bir listeye uygulanabilir. Eklerde tutulur, ancak silinmelerde kaybolur.

q)L: `g# 1 2 3 4 5 4 2 3 1 4 5 6

q)L
`g#1 2 3 4 5 4 2 3 1 4 5 6

q)L,:9

q)L
`g#1 2 3 4 5 4 2 3 1 4 5 6 9

q)L _:2

q)L
1 2 4 5 4 2 3 1 4 5 6 9

Benzersiz (`#u)

Bir listeye benzersiz özniteliğin ("u #) uygulanması, listedeki öğelerin farklı olduğunu gösterir. Bir listenin unsurlarının benzersiz olduğunu bilmek önemli ölçüde hızlanırdistinct ve izin verir q bazı karşılaştırmaları erken yapmak için.

Bir liste benzersiz olarak işaretlendiğinde, listedeki her öğe için dahili bir karma harita oluşturulur. Listedeki işlemler benzersizliği korumalıdır, aksi takdirde öznitelik kaybolur.

q)LU:`u#`MSFT`SAMSUNG`APPLE

q)LU
`u#`MSFT`SAMSUNG`APPLE

q)LU,:`IBM                        /Uniqueness preserved

q)LU
`u#`MSFT`SAMSUNG`APPLE`IBM

q)LU,:`SAMSUNG                    / Attribute lost

q)LU
`MSFT`SAMSUNG`APPLE`IBM`SAMSUNG

Note −

  • "u #, benzersizliği koruyan birleştirmelerde korunur. Silme işlemlerinde ve benzersiz olmayan birleştirmelerde kaybolur.

  • "U # listelerinde yapılan aramalar bir hash işlevi aracılığıyla yapılır.

Öznitelikleri Kaldırma

Öznitelikler, `# uygulanarak kaldırılabilir.

Öznitelikleri Uygulama

Öznitelikleri uygulamak için üç biçim:

  • L: `s# 14 2 3 3 9/ Liste oluşturma sırasında belirtin

  • @[ `.; `L ; `s#]/ Fonksiyonel uygulama, yani L değişken listesine

    / varsayılan ad alanında (yani ".)

    / sıralanan # özniteliği

  • Update `s#time from `tab

    / Tabloyu (sekmeyi) güncelleyerek

    / öznitelik.

Yukarıdaki üç farklı formatı örneklerle uygulayalım.

q)/ set the attribute during creation

q)L:`s# 3 4 9 10 23 84 90

q)/apply the attribute to existing list data

q)L1: 9 18 27 36 42 54

q)@[`.;`L1;`s#]
`.

q)L1                 / check
`s#9 18 27 36 42 54

q)@[`.;`L1;`#]       / clear attribute
`.

q)L1
9 18 27 36 42 54

q)/update a table to apply the attribute

q)t: ([] sym:`ibm`msft`samsung; mcap:9000 18000 27000)

q)t:([]time:09:00 09:30 10:00t;sym:`ibm`msft`samsung; mcap:9000 18000 27000)

q)t

    time         sym    mcap
---------------------------------
  09:00:00.000   ibm    9000
  09:30:00.000   msft   18000
  10:00:00.000  samsung 27000

q)update `s#time from `t
`t

q)meta t               / check it was applied

    c  | t f a
------ | -----
  time | t s
  sym  | s
  mcap | j
  
Above we can see that the attribute column in meta table results shows the time column is sorted (`s#).