使用kdb中的dbmain.q对hdb中的数据进行排序

使用kdb中的dbmain.q对hdb中的数据进行排序,kdb,Kdb,我试图在kdb中对hdb中的1或2列进行排序,但失败。这是我的密码 fncol[dbdir;`trade;`sym;xasc]; 当我调用它时,得到了一个长度错误。但是如果我使用这个代码,我没有长度错误 fncol[dbdir;`trade;`sym;asc];. 但是,这仅对sym列本身进行排序。我希望其他列的数据也根据sym列进行更改 此外,我想将parted属性应用于sym列。我也试着这样分类 fncol[dbdir;`trade;`sym`ptime;xasc];. also fa

我试图在kdb中对hdb中的1或2列进行排序,但失败。这是我的密码

fncol[dbdir;`trade;`sym;xasc]; 
当我调用它时,得到了一个长度错误。但是如果我使用这个代码,我没有长度错误

fncol[dbdir;`trade;`sym;asc];.
但是,这仅对sym列本身进行排序。我希望其他列的数据也根据sym列进行更改

此外,我想将parted属性应用于sym列。我也试着这样分类

fncol[dbdir;`trade;`sym`ptime;xasc];. also failed

是否有任何迹象表明哪个日期因长度错误而失败?其中一个分区可能有问题

如果您尝试将其中一个日期加载到内存中并手动对其排序,也就是

`sym xasc select from trade where date=last date 
这可能表明是否存在导致问题的特定分区


仅供参考如果您对应用p属性感兴趣,您应该尝试在dbmaint.q中使用setattrcol。我认为数据需要先排序。

是否有迹象表明哪个日期出现长度错误?其中一个分区可能有问题

如果您尝试将其中一个日期加载到内存中并手动对其排序,也就是

`sym xasc select from trade where date=last date 
这可能表明是否存在导致问题的特定分区


仅供参考如果您对应用p属性感兴趣,您应该尝试在dbmaint.q中使用setattrcol。但是我认为数据需要先排序。

如果您不确定dbmaint.q将要做什么,您应该始终小心使用它。我从asc在xasc之后工作的事实中得知,您每次都在使用测试hdb

fncol应与一元函数(即1参数)一起使用。它的用例用于修改单个列。您试图做的是修改整个表,因为您希望相对于sym列对整个表进行排序。在每个日期使用.Q.dpft是您想要的,正如Cathal在后续问题中所概述的那样

当您运行这个fncol[dbdir;`trade;`sym;xasc];您将在每个日期保存一个投影以代替sym列

fncol[`:.;`trades;`sym;xasc];
select from trades where date = 2014.04.21
'length
  [0]  select from trades where date = 2014.04.21

q)get `:2014.04.21/trades/sym
k){$[$[#x;~`s=-2!(0!.Q.v y)x;0];.Q.ft[@[;*x;`s#]].Q.ord[<:;x]y;y]}[`p#`sym$`A..
// This is the k definition of xasc with the sym column as the first parameter.

q)xasc
k){$[$[#x;~`s=-2!(0!.Q.v y)x;0];.Q.ft[@[;*x;`s#]].Q.ord[<:;x]y;y]}

// Had you needed to fix your hdb, I managed to undo this using value and indexing to the sym col data.

fncol[`:.;`trades;`sym;{(value x)[1]}];

q)select from trades where date = 2014.04.21
date       sym  time                          src price size
------------------------------------------------------------
2014.04.21 AAPL 2014.04.21D08:00:12.155000000 N   25.31 2450
2014.04.21 AAPL 2014.04.21D08:00:42.186000000 N   25.32 289
2014.04.21 AAPL 2014.04.21D08:00:51.764000000 O   25.34 3167


asc不会中断hdb,因为它只需要1个参数,并且只按升序保存sym列,而不保存表。

如果不确定dbmaint.q将执行什么操作,则应始终小心使用。我从asc在xasc之后工作的事实中得知,您每次都在使用测试hdb

fncol应与一元函数(即1参数)一起使用。它的用例用于修改单个列。您试图做的是修改整个表,因为您希望相对于sym列对整个表进行排序。在每个日期使用.Q.dpft是您想要的,正如Cathal在后续问题中所概述的那样

当您运行这个fncol[dbdir;`trade;`sym;xasc];您将在每个日期保存一个投影以代替sym列

fncol[`:.;`trades;`sym;xasc];
select from trades where date = 2014.04.21
'length
  [0]  select from trades where date = 2014.04.21

q)get `:2014.04.21/trades/sym
k){$[$[#x;~`s=-2!(0!.Q.v y)x;0];.Q.ft[@[;*x;`s#]].Q.ord[<:;x]y;y]}[`p#`sym$`A..
// This is the k definition of xasc with the sym column as the first parameter.

q)xasc
k){$[$[#x;~`s=-2!(0!.Q.v y)x;0];.Q.ft[@[;*x;`s#]].Q.ord[<:;x]y;y]}

// Had you needed to fix your hdb, I managed to undo this using value and indexing to the sym col data.

fncol[`:.;`trades;`sym;{(value x)[1]}];

q)select from trades where date = 2014.04.21
date       sym  time                          src price size
------------------------------------------------------------
2014.04.21 AAPL 2014.04.21D08:00:12.155000000 N   25.31 2450
2014.04.21 AAPL 2014.04.21D08:00:42.186000000 N   25.32 289
2014.04.21 AAPL 2014.04.21D08:00:51.764000000 O   25.34 3167



asc不会中断hdb,因为它只接受1个参数,并且只按升序保存sym列,而不保存表格。

能否在内存中保存整个表格1个日期?不太确定。但是它有很多日期,在你玩dbmaint之前,你可以从你的桌面工作中选择吗?我想其中一个func电话把事情搞砸了是的。它在工作,所以如果你在dbmaint之后从中选择它,它仍然在工作?你能在内存中保存整个表1个日期吗?不太确定。但是它有很多日期,在你玩dbmaint之前,你可以从你的桌面工作中选择吗?我想其中一个func电话把事情搞砸了是的。它在工作,所以如果你在dbmaint之后从中选择它,它仍然在工作?是的,但我得到了's eorr或什么。我想我需要先排序我只有在调用表时才得到长度错误。排序时不会。当您尝试加载数据库时,是否会出现长度错误?或者当您尝试从中选择时?调用表时。加载完成您可以检查其中一个分区目录中的sym文件的大小是否与另一个整数列的大小相同吗?它们应该是一样的。是的,但我得到的是eorr什么的。我想我需要先排序我只有在调用表时才得到长度错误。排序时不会。当您尝试加载数据库时,是否会出现长度错误?或者当您尝试从中选择时?调用表时。加载完成您可以检查其中一个分区目录中的sym文件的大小是否与另一个整数列的大小相同吗?它们应该是一样的。