'tickerplant kdb + / q中的长度错误

时间:2018-06-14 20:04:35

标签: kdb

当我使用sym.q和feed.q启动tick.q时,文件提供如下:

q tick.q sym -p 5010
q feed.q

Github链接:https://github.com/KxSystems/cookbook/tree/master/start/tickhttps://github.com/KxSystems/kdb-tick

tickerplant进程在每次更新时都会输出'length错误,这通常在传递的元素数量不正确时发生:https://code.kx.com/wiki/Errors

我怀疑当Feed进程调用.u.upd

时会发生这种情况

有关如何解决此问题的任何建议吗?

3 个答案:

答案 0 :(得分:1)

在命令行中输入\e 1将暂停执行并运行调试器,以便您查看失败的内容并查询应该帮助查明导致问题的变量。

有关此处调试的详情https://code.kx.com/q/ref/debug/

答案 1 :(得分:0)

如果您使用KX的普通香草标签设置,则没有理由显示该错误。

此外,我认为您需要以feed.q -t 200开始Feed,否则您将无法获得数据。

通常,当表架构不匹配时会出现'length错误。因此,如果您拥有sym.q文件(并且已正确加载),则不应该出现此问题。

只是为了确认这是您目录的结构:

.
├── feed.q
├── README.md
├── tick
│   ├── r.q
│   ├── sym.q
│   └── u.q
└── tick.q

sym.q文件包含您的表架构。如果您在Feedhandler中更改了某些内容,则sym.q中的表架构必须与该更改匹配(即,如果您在Feed中添加了一列,则还必须在该列的表中添加一个持有者)

答案 2 :(得分:0)

在某个端口(9999)上打开一个新的q会话,在那里添加您的架构定义,并将insert定义为.u.upd或类似的东西:

.u.upd:{[t;d]
 .test.t:t;
 .test.d:d;
 t upsert d
}

现在将您的Feed指向此q会话并传输一些数据;这将使您能够在出现错误时分析测试变量。