在kdb中splay之后,在列上应用parted属性,而不丢失另一列上的sorted属性

在kdb中splay之后,在列上应用parted属性,而不丢失另一列上的sorted属性,kdb,Kdb,我们有一个按时间列排序的贸易表 q)trade:([] date:2020.04.05; time:asc 1000000?09:30:00.000 + til 21600000; sym:1000000?`GOOG`AMZN`FB; price:1000000?10.; size:1000000?1000000); 我们正在尝试按日期对其进行分区,并在时间列上应用sorted属性,在sym列上应用parted属性 但是,如果我们使用.Q.en并设置为对表进行分区,则必须丢失排序属性 trad

我们有一个按时间列排序的贸易表

q)trade:([] date:2020.04.05; time:asc 1000000?09:30:00.000 + til 21600000; sym:1000000?`GOOG`AMZN`FB; price:1000000?10.; size:1000000?1000000);
我们正在尝试按日期对其进行分区,并在时间列上应用sorted属性,在sym列上应用parted属性

但是,如果我们使用.Q.en并设置为对表进行分区,则必须丢失排序属性

trade:`sym xasc trade;
update `p#sym from `trade;
`:/parpath/2020.04.05/trade/ set .Q.en[`:/sympath/;trade];
而且,如果我们使用.Q.dpft,那么也会丢失排序属性

.Q.dpft[`:/parpath;2020.04.05;`sym;`trade];

我们如何在sym列上应用parted属性,而不使用time列的sorted属性?

在一般情况下,sym上不能同时使用
`p
,而
`s
上不能同时使用时间。例如,这个表

q)show t:([]sym:`AMZN`GOOG`AMZN;time:09:00:00 10:00:00 11:00:00)
sym  time
-------------
AMZN 09:00:00
GOOG 10:00:00
AMZN 11:00:00
已按时间排序,但无法在sym上应用
`p
。如果重新排列行,使
`p
适用于sym,则会丢失时间值的升序:

sym  time
-------------
AMZN 09:00:00
AMZN 11:00:00
GOOG 10:00:00


话虽如此,如果您只想将一个表作为分区表的一部分保存在磁盘上,那么就永远不需要同时进行分割和排序。您只需要确保sym是分开的,并且时间在每个sym中排序。换句话说,
`sym`time xasc t
就足够了。

在一般情况下,sym上不能同时有
`p
,而
`s
上不能同时有时间。例如,这个表

q)show t:([]sym:`AMZN`GOOG`AMZN;time:09:00:00 10:00:00 11:00:00)
sym  time
-------------
AMZN 09:00:00
GOOG 10:00:00
AMZN 11:00:00
已按时间排序,但无法在sym上应用
`p
。如果重新排列行,使
`p
适用于sym,则会丢失时间值的升序:

sym  time
-------------
AMZN 09:00:00
AMZN 11:00:00
GOOG 10:00:00


话虽如此,如果您只想将一个表作为分区表的一部分保存在磁盘上,那么就永远不需要同时进行分割和排序。您只需要确保sym是分开的,并且时间在每个sym中排序。换句话说,
`sym`time xasc t
就足够了。

在这两种情况下,您都在使用
sym
列上的表,因此
time
列不再排序。请注意
meta`sym xasc trade
的输出,那么,我们是否可以得出结论,如果一个表具有parted列,那么它不能在任何其他列上具有sorted属性?这并不是说
sym
中的parted属性阻止我们将sorted属性应用于
time
。我们无法应用“排序”属性,因为时间列不再排序。@在一般情况下,不能同时使用“否”。但是您可以构造一个表,其中sym被分开,时间被同时排序:
t:([]sym:`p#`AMZN`AMZN`GOOG;time:`s#09:00:00 10:00:00 11:00:00)
在这两种情况下,您都在
sym
列上重新排序表,因此
时间
列不再排序。请注意
meta`sym xasc trade
的输出,那么,我们是否可以得出结论,如果一个表具有parted列,那么它不能在任何其他列上具有sorted属性?这并不是说
sym
中的parted属性阻止我们将sorted属性应用于
time
。我们无法应用“排序”属性,因为时间列不再排序。@在一般情况下,不能同时使用“否”。但是您可以构造一个表,其中sym被分开,时间同时被排序:
t:([]sym:`p#`AMZN`AMZN`GOOG;time:`s#09:00:00 10:00:00 11:00:00)