You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kdb+ Tick架构中trade表无法设为键表导致upsert重复插入问题

Kdb+ 键表创建失败与upsert重复插入问题解决

问题根源

你用trade:([]time:timespan$();sym:symbol$();price:float$();size:long$())定义的是普通表(类型98h),而非键表(99h)。键表需要显式声明键列,你没遵循键表的语法规则,再加上tickerplant要求time为timespan类型且作为首列的限制,导致无法实现按唯一键更新的需求,最终upsert只能重复插入数据。

正确创建键表的方法

要创建符合tickerplant要求的键表,需用键表专属语法:([键列定义] 值列定义)。行情场景下通常用time+sym作为复合唯一键,定义如下:

trade:([time:`timespan$();sym:`symbol$()] price:`float$();size:`long$())

执行type trade会返回99h,确认是键表类型。这个定义完全满足tickerplant对time列的要求——time是首列且为timespan类型。

验证upsert的更新效果

插入重复键的数据测试:

// 第一次插入
trade upsert (`timespan$"00:00:01";`IBM;150.2;100)
// 第二次用相同time+sym更新数据
trade upsert (`timespan$"00:00:01";`IBM;150.5;120)

此时查询trade会发现,对应time和sym的行只有一行,且price和size是最新的更新值,不会出现重复插入的情况。

可选的单键定义

如果你的业务逻辑中time单独作为唯一键,也可以这样定义:

trade:([time:`timespan$()] sym:`symbol$();price:`float$();size:`long$())

根据实际业务场景选择合适的键组合即可。

内容的提问来源于stack exchange,提问作者works

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 07:47:21