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

Ril*_*Hun 0 types kdb

metarelevantOverrides如下:

security j
startDate d
endDate d
dataItem s
val f
Run Code Online (Sandbox Code Playgroud)

我有一个更新查询:

 relevantOverrides:update val:163390j from relevantOverrides where security = 18767
Run Code Online (Sandbox Code Playgroud)

val列有一个float类型,但我需要将更新后的值作为整数插入.

Mar*_*lly 6

由于列表是原子类型,因此不能容易地添加许多不同类型的列表.

执行所需操作的一种方法是追加泛型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
Run Code Online (Sandbox Code Playgroud)

尽管有可能,但是当它在桌面上运行时可能会遇到困难:

  • 首先,您将无法将结果表保存为磁盘,而不是平面表,而不会遇到问题

  • 如果您能够解决这个问题,那么由于列不是向量,您的查询性能会降低.

  • 更新功能本身将是昂贵的,因为该列需要被修改.