如何在KDB/q中对表执行就地删除列操作
问题原因
_操作符的x f: y amend 用法作用于表时,默认针对行索引进行过滤,你传入的列名符号列表不符合行索引的类型要求,所以报类型错误。
正确的就地删除列实现方式
1. 最简洁的原生写法
直接在delete语句的表名前加反引号,就会触发就地修改:
t:([]a:1 2 3;b:4 5 6;c:`d`e`f) delete a,b from `t // 执行后t会就地删除a、b两列
2. 用通用amend函数实现
如果需要用_相关的amend语法实现,可以用@修饰符指定操作对象为表的列键:
@[`t;`a`b;_:] // 等价于上面的delete写法,同样会就地修改t
3. 非就地修改后重赋值(开发中更常用,避免意外修改全局变量)
如果没有强要求必须就地修改,直接将删除列后的结果重赋值给原变量即可,逻辑更清晰易读:
t: `a`b _ t
内容的提问来源于stack exchange,提问作者S.V
相关产品推荐
相关产品推荐

