如何在kdb+订阅TP时修改引擎侧的订阅接收表名称
实现方法
订阅TP侧TradeTab表时,要将本地接收表名改为TradeRec,可根据场景选择以下两种方案:
- 方案一:绑定订阅返回值到目标表名(单表重命名首选)
TP端的.u.sub接口调用后会返回(源表名; 数据流引用)格式的二元组,默认场景下订阅端会自动创建和源表同名的本地表接收数据,只要将返回的数据流引用直接赋值给指定的本地表名,就不会生成默认的同名源表,所有增量数据会直接写入目标表。
实现代码:
// 发起订阅并接收返回结果 subRes: h(`.u.sub;`TradeTab;`long$til 10); // 将数据流绑定到本地指定表名 TradeRec: subRes[1];
如果本地之前已经生成过默认的TradeTab表,先执行undef(TradeTab)`删除旧表避免冲突即可。
- 方案二:自定义数据更新回调(适合多表映射、带数据转换的场景)
如果订阅时需要同步做数据清洗转换、或者多源表映射到同一张本地表,可以重写默认的.u.upd更新回调,手动指定源表数据的写入目标:
// 自定义数据更新处理逻辑 .u.upd: {[srcTab; data] // 匹配源表为TradeTab时写入本地TradeRec if[srcTab=`TradeTab; // 本地表不存在时自动按源表结构初始化空表 if[not exists(`TradeRec); `TradeRec set 0#data]; insert[`TradeRec; data]; ] }; // 正常发起订阅即可 h(`.u.sub;`TradeTab;`long$til 10);
注意:多节点部署场景下,自定义的
.u.upd回调需要定义在订阅节点的全局作用域,定义在局部作用域会导致回调不生效。
内容的提问来源于stack exchange,提问作者Terry
相关产品推荐
相关产品推荐

