我正在尝试直接从实时引擎发布表。基本上,我有一个实时引擎,可连接到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
最有可能是问题所在。但是,我不能用大写字母在股票行情加载模式。知道我应该怎么做吗?
答案 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)