You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于将kdb+ parse输出转换为functional select的问题咨询

KDB+ Parse输出转Functional Select问题

我在将parse输出转换为functional select时遇到问题,请问是否需要将每个,转换为enlist?

完整问题场景

q)dict:exec i by uid from select uid from tb where sym=syms

场景一

q)hd:exec date by uid from select date,ht by uid from tb where uid in raze key dict
q)parse"exec date by uid from select date,ht by uid from tb where uid in raze key dict"
?
(?;`tb;,,(in;`uid;(,/;(!:;`dict)));(,`uid)!,`uid;`date`ht!`date`ht)
()
,`uid
,`date

场景二

q)ht:key asc(value exec ht by uid from tb where uid in uids)!(value dict)
q)parse"exec ht by uid from tb where uid in uids"
?
`tb
,,(in;`uid;`uids)
,`uid
,`ht
q)

我的尝试

尝试一(无法运行)

q)?[(?;`tb;enlist enlist (in;`uid;(,/;(!:;`dict)));(enlist `uid)!enlist `uid;`date`ht!`date`ht);();enlist `uid;enlist `date]
'type
  [0]  ?[(?;`tb;enlist enlist (in;`uid;(,/;(!:;`dict)));(enlist `uid)!enlist `uid;`date`ht!`date`ht);();(enlist`date)!enlist`date]

尝试二(可运行)

q) ?[`tb;enlist(in;`uid;`uids);`uid;(enlist`ht)!enlist`ht]

问题解答

不需要盲目将每个,替换为enlist,核心是理解parse输出各部分对应functional select参数的类型要求:

Functional Select语法回顾

KDB+的functional select/exec格式为:

?[table; where_clause; by_clause; col_spec]
  • where_clause:布尔表达式的列表,单个条件需用enlist包裹(对应parse输出里的,,cond,即enlist enlist cond)
  • by_clause:分组列的列表,单个分组列用enlist col(对应parse输出里的,col)
  • col_spec:单个列时用enlist col;多列或重命名时用字典格式(如col1col2!col1col2)

场景一错误原因及修正

尝试一报错是因为最后一个参数错误:parse输出里的,date是要选择的单列列表(enlistdate),但你写成了字典格式(enlistdate)!enlistdate。同时子查询里的(,/;(!:;dict))等价于(raze; keydict)`,可以简化写法。

修正后的正确代码:

?[
    (?;`tb;enlist enlist (in;`uid;(raze;key`dict));(enlist`uid)!enlist`uid;`date`ht!`date`ht);
    ();  // 外层无where条件
    enlist`uid;  // 分组列
    enlist`date  // 要选择的列
]

场景二正确原因

尝试二符合参数要求:

  • enlist(in;uid;uids)对应parse里的,,(in;uid;uids),是单个where条件的列表格式
  • enlistht!enlistht是单列的字典格式(也可以直接用enlistht`)

内容的提问来源于stack exchange,提问作者threedom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:35:55