Q Language - Atributos

A las listas, diccionarios o columnas de una tabla se les pueden aplicar atributos. Los atributos imponen ciertas propiedades en la lista. Algunos atributos pueden desaparecer con la modificación.

Tipos de atributos

Ordenado (`s #)

`s # significa que la lista está ordenada en orden ascendente. Si una lista está ordenada explícitamente por asc (o xasc), la lista automáticamente tendrá el atributo ordenado establecido.

q)L1: asc 40 30 20 50 9 4

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

Una lista que se sabe que está ordenada también puede tener el atributo establecido explícitamente. Q comprobará si la lista está ordenada, y si no, una s-fail se lanzará un error.

q)L2:30 40 24 30 2

q)`s#L2
's-fail

El atributo ordenado se perderá en un agregado no ordenado.

Parted (`p #)

`p # significa que la lista está dividida y los elementos idénticos se almacenan contiguamente.

El rango es un int o temporal type tener un valor int subyacente, como años, meses, días, etc. También puede dividir sobre un símbolo siempre que esté enumerado.

La aplicación del atributo parted crea un diccionario de índice que asigna cada valor de salida único a la posición de su primera aparición. Cuando se divide una lista, la búsqueda es mucho más rápida, ya que la búsqueda lineal se reemplaza por la búsqueda de tabla hash.

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 −

  • El atributo parted no se conserva en una operación de la lista, incluso si la operación conserva la partición.

  • El atributo parted debe considerarse cuando el número de entidades alcanza los mil millones y la mayoría de las particiones son de tamaño sustancial, es decir, hay una repetición significativa.

Agrupado (`g #)

`g # significa que la lista está agrupada. Se crea y mantiene un diccionario interno que asigna cada elemento único a cada uno de sus índices, lo que requiere un espacio de almacenamiento considerable. Para una lista de longitudL conteniendo u artículos únicos de tamaño s, esto será (L × 4) + (u × s) bytes.

La agrupación se puede aplicar a una lista cuando no se pueden hacer otras suposiciones sobre su estructura.

El atributo se puede aplicar a cualquier lista escrita. Se mantiene en los anexos, pero se pierde en las eliminaciones.

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

Único (`#u)

Aplicar el atributo único (`u #) a una lista indica que los elementos de la lista son distintos. Saber que los elementos de una lista son únicos acelera drásticamentedistinct y permite q para ejecutar algunas comparaciones temprano.

Cuando una lista se marca como única, se crea un mapa hash interno para cada elemento de la lista. Las operaciones de la lista deben preservar la unicidad o se perderá el atributo.

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 # se conserva en concatenaciones que conservan la singularidad. Se pierde en eliminaciones y concatenaciones no únicas.

  • Las búsquedas en las listas `u # se realizan mediante una función hash.

Eliminar atributos

Los atributos se pueden eliminar aplicando `#.

Aplicar atributos

Tres formatos para aplicar atributos son:

  • L: `s# 14 2 3 3 9/ Especificar durante la creación de la lista

  • @[ `.; `L ; `s#]/ Aplicar funcional, es decir, a la lista de variables L

    / en el espacio de nombres predeterminado (es decir, `.) se aplica

    / el atributo `s # ordenado

  • Update `s#time from `tab

    / Actualice la tabla (pestaña) para aplicar la

    / atributo.

Apliquemos los tres formatos diferentes anteriores con ejemplos.

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#).