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

kdb+/q TickerPlant配置:批量CSV数据发送至TP故障排查

批量发送CSV数据到KDB+ Tickerplant的解决方案

问题概述

使用官方tick.q搭建tickerplant(TP)后,通过feed.q加载CSV数据并尝试发送至TP,但数据未正确送达。需求是批量发送已加载的表数据(而非实时流式逐行发送)。

原feed.q存在的问题

原脚本使用.z.ts定时逐行发送数据,属于流式传输,且存在以下潜在问题:

  • 全局变量i的作用域可能导致逻辑异常
  • 逐行发送效率低,且未处理连接失败或发送确认
  • 未确保发送的表结构与TP端一致

修正后的feed.q脚本

// 连接Tickerplant端口
h:hopen`::5010
// 检查连接是否成功
if[h=-1; show "Failed to connect to tickerplant"; exit]

// 加载CSV数据(保留原有加载逻辑,确保最终rpr为正确的表格式)
fPath:{.Q.dd [`:/Users/dt/hb/rpcoreData/histData/csvs]x}'[key `:/Users/dt/hb/rpcoreData/histData/csvs]
fPath1:{.Q.dd[x] each key x}'[fPath]
rpr:raze {("**************************";enlist",") 0: read0 each x}'[raze fPath1]

// 确保rpr转换为表结构(根据实际解析结果调整,示例为行列表转表)
// 如果解析后是列的列表,使用 `rpr:flip rpr`
rpr:flip enlist rpr

// 方案1:批量发送整个表到TP
neg h(`.u.upd;`rpr;rpr)

// 方案2:大表分块发送(避免内存压力,示例每次发10000行)
// chunkSize:10000
// for[i:0; i<count rpr; i+:chunkSize] {
//     neg h(`.u.upd;`rpr;rpr[i+i til chunkSize])
// }

// 发送完成后关闭连接
hclose h

关键配置步骤

  1. 初始化TP的表结构
    TP需要提前知道接收的表结构,需在schema文件(如schema.q)中定义rpr表,示例:

    // schema.q
    rpr:([]time:`timespan$(); sym:`symbol$(); price:`float$(); size:`long$())
    

    启动TP时加载schema:

    q tick.q -p 5010 schema.q
    
  2. 确保表结构一致性
    feed端加载的rpr表字段顺序、类型必须与TP端定义完全一致,否则TP会拒绝接收数据。

  3. 连接有效性检查
    增加连接失败的判断逻辑,避免在未连接成功的情况下执行发送操作。

验证数据是否送达

在TP实例中执行rpr即可查看已接收的数据;若使用了downstream subscriber(如rdb),可在rdb中查询对应表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 13:24:53