在●使用.Q.ind []更新单元在一个分区表中

问题描述 投票:0回答:2

我有一个分区表,可以使用get命令这样阅读:得到`:HDB / 2018年1月1日/贸易

并给我:

sym size exchange
-----------------
0   100  2
1   200  2
1   300  2

我喜欢从200和300修改一样大小的单元值,以给定的行的索引或列表1000。所以我用

.Q.ind[`:hdb/2018.01.01/trade; 1 2j]

让行,然后改变细胞。但是,在运行时.Q.ind []我得到一个`排名错误。

kdb
2个回答
2
投票

你得到的错误是第一个输入参数去.Q.ind是映射表的名称,而不是代表表格名称/位置的符号

我不知道如果.Q.ind将帮助你在这里但是,它的数据检索比数据更有用的(再)写的。

一对夫妇的方法,你可以采取:

  1. 拉动整个日期切片select from table where date=X,修改它在内存中,然后把它写下来回用`:hdb/2018.01.01/trade/ set delete date from modifiedTable。这是假设你没有修改任何枚举/符号列。你必须要小心,以保持相同的架构,保持相同的压缩等
  2. 使用为dbmaint包处理的变化:https://github.com/KxSystems/kdb/blob/master/utils/dbmaint.md
  3. 如果你细心的话,你可以拉在仅列本身,修改它并把它写回去。 p set @[get p:`:hdb/2018.01.01/trade/col1;1 2;:;1000]

1
投票

你也可以使用一个修改操作来更新值。

@[`:hdb/2018.01.01/trade;`size;@[;1 2;:;1000]

这将修改磁盘上的表。

q)get`:hdb/2018.01.01/trade
sym size exchange
-----------------
0   100  2
1   200  2
1   300  2

q)@[`:hdb/2018.01.01/trade;`size;@[;1 2;:;1000]]
`:hdb/2018.01.01/trade
q)get `:hdb/2018.01.01/trade/
sym size exchange
-----------------
0   100  2
1   1000 2
2   1000 2
© www.soinside.com 2019 - 2024. All rights reserved.