我有一个分区表,可以像这样使用get命令读取它: 得到`:hdb / 2018.01.01 / trade
并且会给我:
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 []时遇到了“排名错误”。
答案 0 :(得分:2)
您得到的错误是.Q.ind的第一个输入参数是映射的表名,而不是代表表名/位置的符号
我不确定.Q.ind是否会在这里为您提供帮助,它对于数据检索比对数据(重新)写入更为有用。
您可以采取的两种方法:
select from table where date=X
拉入,在内存中进行修改,然后使用`:hdb/2018.01.01/trade/ set delete date from modifiedTable
将其写回。这是假设您不修改任何枚举/符号列。您必须小心维护相同的架构,保持相同的压缩等p set @[get p:`:hdb/2018.01.01/trade/col1;1 2;:;1000]
答案 1 :(得分: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