KDB +:如何从具有不同类型的另一个值的表中更新一个值

时间:2018-08-07 15:23:31

标签: types kdb

meta的{​​{1}}如下:

relevantOverrides

我有一个更新查询:

security j
startDate d
endDate d
dataItem s
val f

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

1 个答案:

答案 0 :(得分:6)

由于列表属于原子类型,因此无法轻松地将其他类型的数字添加到位。

一种执行所需操作的方法是附加通用null(::)或要更新的类型的值(在这种情况下为长值),这会将您的列表变成混合列表。

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

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

尽管有可能,但在桌面上操作时您可能会遇到困难:

  • 首先,您将无法将结果表另存为磁盘 除了平面以外,没有其他问题

  • 如果您能够解决这个问题,您将获得一个较低的查询 由于列不是向量,因此性能提高。

  • 根据列的需要,更新功能本身将非常昂贵 被修正。