KDB+:如何用另一个不同类型的值更新 Table 中的一个值

KDB+: How to Update a Value from Table with Another Value of Different Type

tablerelevantOverridesmeta如下:

security j
startDate d
endDate d
dataItem s
val f

我有一个更新查询:

 relevantOverrides:update val:163390j from relevantOverrides where security = 18767

val 列具有浮点类型,但我需要将更新后的值作为整数插入。

由于列表是原子类型的,因此无法轻松添加不同类型的数字。

做你想做的事情的一种方法是附加通用 null (::) 或你想更新的类型的值(在本例中是 long),这会将你的列表变成一个混合列表。

然后,您可以在从列表中删除通用 null 并更新之前更新 where 子句指定的索引处的值。

q)t
security startDate  endDate    dataItem val
-------------------------------------------------
2        2011.11.15 2003.11.17 dol      2.310108
8        2015.03.27 2015.01.12 nca      0.8724017
6        2012.06.15 2015.05.03 dfp      1.024432
9        2012.04.15 2001.07.18 hon      8.671096
0        2000.09.02 2009.12.29 ofm      7.278528

q)update val:-1_ @[val,(::);where security=6;:;163390j] from t
security startDate  endDate    dataItem val
------------------------------------------------
2        2011.11.15 2003.11.17 dol      2.310108
8        2015.03.27 2015.01.12 nca      163390
6        2012.06.15 2015.05.03 dfp      1.024432
9        2012.04.15 2001.07.18 hon      8.671096
0        2000.09.02 2009.12.29 ofm      7.278528

虽然有可能,但在 table 上运行时您可能会 运行 遇到困难:

  • 首先,您将无法将结果 table 保存到磁盘 除了没有 运行 问题

  • 之外的任何东西 table
  • 如果你能解决这个问题,你的查询就会降低 由于列不是向量而导致的性能。

  • 更新函数本身会很昂贵,因为列需要 待修正