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

kdb中逐行处理表并将任意行数结果追加为新表的方法

q语言逐行处理表后合并任意行数结果的实现方法

问题描述

现有初始表定义:

t:([]a:`a`b`c;b:1 2 3;c:`x`y`z)

需要逐行迭代处理该表,单行处理逻辑可返回任意行数的结果表,所有行处理完成后需合并为统一结果表,示例期望输出如下:

results:([]a:`a1`b1`b2`b3`c1`c2;x:1 2 2 2 3 3)

原有尝试写法uj { // some processing function } each t无法正常运行。

错误原因

uj是需要接收两个表作为入参的二元全连接函数,直接搭配each使用时,不会对逐行生成的多个结果表执行合并操作,仅会将单参传入的uj单独作用在每个结果表上,逻辑不成立。

正确实现

根据单行处理函数返回表的schema一致性,选择对应写法:

  • 若所有行返回的结果表列名、列类型完全一致,优先使用raze做纵向平铺合并,写法简洁且性能最优:
/ 示例处理函数,和示例输出逻辑对齐:a值为`a返回1行,`b返回3行,`c返回2行
processRow:{[row]
    case[
        row`a = `a; ([]a:`a1; x:row`b);
        row`a = `b; ([]a:`b1`b2`b3; x:3#row`b);
        row`a = `c; ([]a:`c1`c2; x:2#row`b)
    ]
 };
/ 合并逐行结果
results: raze processRow each t
  • 若不同行返回的结果表可能存在列差异(部分行返回的表存在其他行没有的列),使用uj/(uj的over归约操作)依次做全连接合并,缺失列会自动填充对应类型的空值:
results: uj/ processRow each t

提示:uj/的执行逻辑是对逐行返回的表列表,从左到右依次执行uj合并,即等价于(t1 uj t2) uj t3 ... uj tn。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 08:12:47