我想将列名传递给Q函数以查询已加载的表。
示例:
getPosts
这不起作用,因为Q文档说我不能将列作为参数传递。有没有办法绕过这个?
答案 0 :(得分:3)
当q解释x时,它将把它视为字符串,它没有对该列的引用,因此您的输出将仅计为“ HEADER”。
如果您想将列作为字符串传递,则需要构建整个select语句,然后使用value
{value "select count ",x," from tab"} "HEADER"
但是,推荐的方法是使用functional select。下面,我使用parse使用解析树来构建等效的功能选择。
/Create sample table
tab:([]inst:10?`MSFT`GOOG`AAPL;time:10?.z.p;price:10?10f)
/Generate my parse tree to get my functional form
.Q.s parse "select count i by inst from tab"
/Build this into my function
{?[`tab;();(enlist x)!enlist x;(enlist `countDistinct)!enlist (#:;`i)]} `inst
请注意,您必须将列作为符号传递进来。另外,#:i只是等于i的k。
更新多列
tab:([]inst:10?`MSFT`GOOG`AAPL;time:10?.z.p;price:10?10f;cntr:10`HK`SG`UK`US)
{?[`tab;();(x)!x;(enlist `countDistinct)!enlist (#:;`i)]} `inst`cntr
答案 1 :(得分:0)
要获取select语句的功能形式,建议使用buildSelect。另外,请减小括号的范围,即使用enlist[`countDistinct]
代替(enlist `countDistinct)
。