将 table 发布回 tickerplant

Publishing table back to tickerplant

我正在尝试直接从实时引擎发布 table。基本上我有一个连接到 tickerplant 的实时引擎,订阅 table 的原始版本并添加一些新列。现在我想把这个 table 的增强版本推回 tickerplant。我有一个 pub 函数,它按以下方式推送 table:

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

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

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 最有可能是问题所在。但是,我无法用大写字母在 tickerplant 中加载模式。知道我应该怎么做吗?

您可以使用通用列表类型定义架构,它将采用第一个插入的类型。

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

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

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

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

因此,在输入结果之前,其元是:

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

这将被更新以匹配 table 中的第一个条目。

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

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