Linguagem Q - Atributos

Listas, dicionários ou colunas de uma tabela podem ter atributos aplicados a eles. Os atributos impõem certas propriedades na lista. Alguns atributos podem desaparecer na modificação.

Tipos de Atributos

Ordenado (`s #)

`s # significa que a lista está classificada em ordem crescente. Se uma lista for explicitamente classificada por asc (ou xasc), a lista terá automaticamente o conjunto de atributos classificado.

q)L1: asc 40 30 20 50 9 4

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

Uma lista que é conhecida por ser classificada também pode ter o atributo definido explicitamente. Q irá verificar se a lista está classificada e, se não estiver, um s-fail erro será lançado.

q)L2:30 40 24 30 2

q)`s#L2
's-fail

O atributo classificado será perdido em um acréscimo não classificado.

Parted (`p #)

`p # significa que a lista é dividida e itens idênticos são armazenados contiguamente.

O alcance é um int ou temporal type tendo um valor int subjacente, como anos, meses, dias, etc. Você também pode particionar sobre um símbolo, desde que seja enumerado.

Aplicar o atributo parted cria um dicionário de índice que mapeia cada valor de saída exclusivo para a posição de sua primeira ocorrência. Quando uma lista é dividida, a pesquisa é muito mais rápida, já que a pesquisa linear é substituída pela pesquisa com hashtable.

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 −

  • O atributo parted não é preservado em uma operação na lista, mesmo se a operação preserva o particionamento.

  • O atributo parted deve ser considerado quando o número de entidades atingir um bilhão e a maioria das partições for de tamanho substancial, ou seja, houver repetição significativa.

Agrupado (`g #)

`g # significa que a lista está agrupada. Um dicionário interno é construído e mantido que mapeia cada item único para cada um de seus índices, exigindo um espaço de armazenamento considerável. Para uma lista de comprimentoL contendo u itens únicos de tamanho s, isto será (L × 4) + (u × s) bytes.

O agrupamento pode ser aplicado a uma lista quando nenhuma outra suposição pode ser feita sobre sua estrutura.

O atributo pode ser aplicado a qualquer lista digitada. É mantido em anexos, mas perdido em exclusões.

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 o atributo exclusivo (`u #) a uma lista indica que os itens da lista são distintos. Saber que os elementos de uma lista são únicos acelera drasticamentedistinct e permite q para executar algumas comparações antecipadamente.

Quando uma lista é sinalizada como exclusiva, um mapa hash interno é criado para cada item da lista. As operações na lista devem preservar a exclusividade ou o atributo será perdido.

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 # é preservado em concatenações que preservam a exclusividade. Ele se perde em exclusões e concatenações não exclusivas.

  • As pesquisas nas listas `u # são feitas por meio de uma função hash.

Removendo Atributos

Os atributos podem ser removidos aplicando `#.

Aplicando Atributos

Três formatos de aplicação de atributos são -

  • L: `s# 14 2 3 3 9/ Especificar durante a criação da lista

  • @[ `.; `L ; `s#]/ Funcional aplicar, ou seja, para a lista de variáveis ​​L

    / no namespace padrão (ou seja, `.) se aplica

    / o atributo `s # classificado

  • Update `s#time from `tab

    / Atualize a tabela (guia) para aplicar o

    / atributo.

Vamos aplicar os três formatos diferentes acima com exemplos.

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