如何将kdb表中列表类型的value和price字段展开为多行?
解决方法:展开KDB表中的嵌套列表列
要把包含列表类型字段的KDB表展开成每行对应列表中单个元素的结构,你可以用KDB内置的ungroup函数,这是处理这类场景最简洁直接的方式。
步骤1:构造原表
先确认你的原表结构(和描述一致),可以用以下代码创建:
t:([] name:`Paul; value:(1 2); price:(3 4))
执行后原表的输出为:
name value price ---------------- Paul 1 2 3 4
步骤2:用ungroup展开列表列
直接对表调用ungroup函数,它会自动识别列表类型的字段,将其展开为多行,同时重复非列表列的对应值:
ungroup t
执行后就能得到你想要的结果:
name value price ---------------- Paul 1 3 Paul 2 4
补充说明
ungroup会自动处理所有列表类型的列,只要每行中这些列表列的长度一致(比如这里value和price都是长度2的列表),就能正确展开。- 如果只需要展开部分列表列,可以先筛选目标列再执行
ungroup,比如:
ungroup select name, value, price from t
不过在这个场景下,直接ungroup t就完全够用了。
内容的提问来源于stack exchange,提问作者Theboy
相关产品推荐
相关产品推荐

