Kdbplus-q-language-attributes
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
注-
- parted属性は、リストに対する操作の下では保持されません。 操作はパーティションを保持します。
- エンティティの数が10億に達し、パーティションのほとんどがかなりのサイズである場合、つまり、かなりの繰り返しがある場合、parted属性を考慮する必要があります。
グループ化( `g#)
`g#はリストがグループ化されていることを意味します。 内部ディクショナリが作成および維持され、一意の各アイテムが各インデックスにマップされ、かなりのストレージスペースが必要になります。 サイズ s の u 固有項目を含む長さ L のリストの場合、これは*(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#)をリストに適用することは、リストのアイテムが異なることを示します。 リストの要素が一意であることを知っていると、区別*が劇的に高速化され、 *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
注-
- `u#は、一意性を保持する連結で保持されます。 削除および一意でない連結では失われます。
- `u#リストの検索は、ハッシュ関数を介して行われます。
属性を削除する
属性を削除するには、 `#を適用します。
属性を適用する
属性を適用するための3つの形式は次のとおりです-
- * L: `s#14 2 3 3 9 */リスト作成中に指定
- * @ [
。; `L; `s#]
*/機能的に適用、つまり 変数リストL +/デフォルトの名前空間(つまり、 `。)apply +/ソートされた</literal> s#属性 - *
tabから
s#timeを更新* /テーブル(タブ)を更新して、/属性を適用します。
上記の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#).