如何在kdb/Q表的中间位置添加新列?
在kdb/Q表中间添加列的实现方式
kdb/Q没有原生支持直接在表中间插入列的操作,但可以通过重建表的方式轻松实现,以下是几种实用方法:
1. 基础写法(适合列少的场景)
先定义原表和要插入的EndDate数据:
// 原表 table_a:([] Symbol:`X`Y`Z; StartDate:2023.09.01 2023.09.02 2023.09.03;Name:`Maria`Sam`Sydney) // 要插入的EndDate列数据 endDates:2023.09.01 2023.09.08 2023.09.14
方式1:先追加列再调整顺序
先把EndDate追加到表末尾,再重新指定列顺序:
// 追加列到末尾 table_a:update EndDate:endDates from table_a; // 重新指定列顺序,将EndDate放在StartDate和Name之间 table_a:table_a`Symbol`StartDate`EndDate`Name
方式2:直接构造新表
一步到位,按目标列顺序直接生成新表:
table_a:([] Symbol:table_a`Symbol; StartDate:table_a`StartDate; EndDate:endDates; Name:table_a`Name )
2. 通用写法(适合列多的场景)
如果表的列很多,手动罗列所有列太麻烦,可以通过操作列名列表来动态插入:
// 获取原表列名列表 cols:cols table_a; // 在StartDate的下一个位置插入EndDate列名 newCols:insertAt[where cols=`StartDate; cols; `EndDate]; // 合并原表和新列,按新列顺序生成表 table_a:([EndDate:endDates]!table_a)[newCols]
说明
kdb/Q的表本质是由列名和对应列数据组成的字典,列顺序是表结构的一部分,修改列顺序或插入中间列都需要重建表,但kdb对这类操作的处理效率很高,不会有明显性能问题。
内容的提问来源于stack exchange,提问作者mmv456
相关产品推荐
相关产品推荐

