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

如何将kdb表中字典类型列转换为表(含异构键场景)

处理KDB中键集合不一致的字典列转表问题

当字典列的键集合不统一时,直接用uj合并会因键不匹配返回字典列表。解决核心是先补全所有字典的缺失键(用null填充对应值),再合并成表,具体操作如下:

完整实现步骤与示例

// 原始表
q)t1:([] a:1 2 3 ; b: `a`b`c; d:(`x`y!(1 2); `x`y!(11 22); `x`y`z!(111 222 333)))

// 1. 提取所有字典的键的并集,确定最终表的列集合
q)allKeys:distinct raze keys each t1.d
`x`y`z

// 2. 扩展每个字典,补全缺失键(缺失键对应值自动设为null)
q)extendedDicts:{[keys;d] keys!d[keys]}[allKeys] each t1.d
`x`y`z!(1;2;0N)
`x`y`z!(11;22;0N)
`x`y`z!(111;222;333)

// 3. 合并扩展后的字典为结构化表
q)(uj/) value extendedDicts
x   y   z
----------
1   2
11  22
111 222 333

简化一行写法

可以将步骤合并为单行代码,减少中间变量:

q)(uj/) value {[allKeys;d] allKeys!d[allKeys]}[distinct raze keys each t1.d] each t1.d
x   y   z
----------
1   2
11  22
111 222 333

原理说明

  • distinct raze keys each t1.d:遍历所有字典的键,扁平化后去重,得到所有需要的列名
  • keys!d[keys]:用完整键集合重新构造字典,缺失的键会自动填充0N(KDB中的null值),确保所有字典的键集合完全一致
  • 键统一后,(uj/) value就能正确对齐列,合并成标准表结构

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 06:49:58