循环调用KDB函数返回参数而非元数据,语法是否有误?
KDB循环调用元数据函数问题排查
我有一个返回表元数据(meta)的KDB函数,单独传入单个参数时能正常运行,但循环调用时返回的却是参数`metas而非预期的元数据。
相关代码
h: hopen `:host:port:id:pass tabs:h"exec distinct tables from configTable" getMeta:first h({`funcName;;;`metas};[`tickType;]each tabs)
tabs的取值:
`table1`table2`table3`table4`table5
单个表的正常调用示例:
h(`funcName;`tickType;`tableName;`metas)
问题原因与修正
你的语法确实存在错误,问题出在远程调用的参数构造和each的使用逻辑上:
- 原代码里的匿名函数
{funcName;;;metas}没有接收tabs的元素作为参数,它只会返回metas符号,根本没触发funcName的实际调用。 - 远程批量调用时,需要为每个表名构造完整的参数列表,再通过
each逐个发起调用。
修正后的代码可以写成:
h: hopen `:host:port:id:pass tabs:h"exec distinct tables from configTable" getMeta:h each (`funcName;`tickType;';`metas)','tabs
或者更直观的写法:
// 构造每个调用的参数列表 args:(`funcName;`tickType;';`metas)','tabs // 逐个发起远程调用 getMeta:h each args
这段代码的逻辑是:
('tabs)将每个表名单独拆分,和固定参数(funcName;tickType)、(metas)拼接成完整的调用参数,比如每个元素是(funcName;tickType;table1;metas)`h each会对每个参数列表执行远程调用,最终返回所有表的元数据集合。
内容的提问来源于stack exchange,提问作者CleanSock
相关产品推荐
相关产品推荐

