将表格发布回tickerplant

时间:2018-10-04 13:53:11

标签: kdb

我正在尝试直接从实时引擎发布表。基本上,我有一个实时引擎,可连接到tickerplant,订阅表的原始版本并添加一些新列。现在,我希望将此表格的增强版本推回到排纸装置。我有一个pub函数,它以以下方式推送表:

neg[handle](`.u.upd;`tablename;tabledata)

问题是我收到类型错误。我查看了表的架构,它们略有不同。

meta table1
c               | t f a
----------------| -----
time            | p
sym             | s
col1            | c
col2            | s
col3            | i

meta table2
c               | t f a
----------------| -----
time            | p
sym             | s
col1            | C
col2            | s
col3            | i

该资本C最有可能是问题所在。但是,我不能用大写字母在股票行情加载模式。知道我应该怎么做吗?

2 个答案:

答案 0 :(得分:2)

您可以使用通用列表类型定义架构,它将从第一次插入中获取其类型。

tab:([] col1:`int$();generic:();col3:`$())

另一个问题是您的tickerplant可能期望将一个列表(列表)发送到其.u.upd而不是您要发送给它的表,因此您可能想value flip表在发送之前。 (请注意,如果第一列还没有时间戳记,那么tickerplant会尝试在其前面加上时间戳记)

答案 1 :(得分:1)

元表中的大写字母C是嵌套的传入数据的结果。要解决此问题,您应该使用无类型的空列表声明架构。

table2:([] time:`timestamp$();sym:`$();col1:();col2:`$();col3:"I"$())

因此,在输入结果之前,其元数据为:

q)meta table2
c   | t f a
----| -----
time| p
sym | s
col1|
col2| s
col3| i

然后将其更新以匹配表中的第一项。

此外,.u.upd要求输入不是表,而是列表列表,可以解决此问题  使用:

neg[handle](`.u.upd;`tablename;value flip tabledata)