Q言語-属性

テーブルのリスト、辞書、または列には、属性を適用できます。属性は、リストに特定のプロパティを課します。一部の属性は、変更すると消える場合があります。

属性の種類

ソート済み( `s#)

`s#は、リストが昇順でソートされることを意味します。リストがasc(またはxasc)によって明示的にソートされている場合、リストには自動的にソートされた属性が設定されます。

q)L1: asc 40 30 20 50 9 4

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

ソートされていることがわかっているリストには、属性を明示的に設定することもできます。 Q リストがソートされているかどうかをチェックし、ソートされていない場合は、 s-fail エラーがスローされます。

q)L2:30 40 24 30 2

q)`s#L2
's-fail

ソートされた属性は、ソートされていない追加で失われます。

別れた( `p#)

`p#は、リストが分割され、同一のアイテムが連続して保存されることを意味します。

範囲は int または temporal type 年、月、日などの基になるint値を持つ。列挙されている場合は、シンボルを分割することもできます。

parted属性を適用すると、一意の各出力値を最初に出現する位置にマップするインデックスディクショナリが作成されます。リストが分割されると、線形検索がハッシュテーブルルックアップに置き換えられるため、ルックアップがはるかに高速になります。

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属性は、操作がパーティショニングを保持している場合でも、リストの操作では保持されません。

  • エンティティの数が10億に達し、ほとんどのパーティションがかなりのサイズである場合、つまり、かなりの繰り返しがある場合は、parted属性を検討する必要があります。

グループ化( `g#)

`g#は、リストがグループ化されていることを意味します。各一意のアイテムをその各インデックスにマップする内部ディクショナリが構築および維持されるため、かなりのストレージスペースが必要になります。長さのリストについてL 含む u サイズのユニークなアイテム s、 これは次のようになります (L × 4) + (u × s) バイト。

リストの構造について他の仮定ができない場合は、リストにグループ化を適用できます。

この属性は、型指定された任意のリストに適用できます。追加では維持されますが、削除では失われます。

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

ユニーク( `#u)

一意の属性( `u#)をリストに適用すると、リストの項目が異なることを示します。リストの要素が一意であることを知っていると、劇的にスピードアップしますdistinct そして許可します q いくつかの比較を早期に実行します。

リストに一意のフラグが付けられると、リスト内の各アイテムに対して内部ハッシュマップが作成されます。リストの操作は一意性を保持する必要があります。そうしないと、属性が失われます。

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#は、一意性を保持する連結で保持されます。削除や一意でない連結では失われます。

  • `u#リストの検索は、ハッシュ関数を介して行われます。

属性の削除

`#を適用することで属性を削除できます。

属性の適用

属性を適用するための3つの形式は次のとおりです。

  • L: `s# 14 2 3 3 9/リスト作成時に指定

  • @[ `.; `L ; `s#]/機能適用、つまり変数リストLに

    /デフォルトの名前空間(つまり `。)で適用

    /ソートされた `s#属性

  • Update `s#time from `tab

    /テーブル(タブ)を更新して適用します

    /属性。

上記の3つの異なるフォーマットを例を挙げて適用してみましょう。

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