在 kdb 中展开后,在一列上应用 parted 属性,而不会在另一列上丢失 sorted 属性

Apply parted attribute on a column without loosing sorted attribute on another column after splay in kdb

我们有一笔 table 交易按时间列排序

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);

我们正在尝试按日期对其进行分区,并在时间列上应用排序属性,在符号列上应用分离属性。

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

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 属性?

在一般情况下,您不能同时让 `p on sym 和 `s on time。比如这个table

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  time
-------------
GOOG 10:00:00
AMZN 09:00:00
AMZN 11:00:00

话虽如此,如果您只想保存一个 table 作为磁盘上分区 ​​table 的一部分,例如。您只需要确保 sym 是分开的并且时间在每个 sym 中排序。也就是说 `sym`time xasc t 就够了。