kdb如何将列名传递给函数

时间:2018-02-13 09:53:31

标签: kdb

作为简化示例,我有

tbl:flip `sym`v1`v2!(`a`b`c`d; 50 280 1200 1800; 40 190 1300 1900)

我希望将列名传递给像

这样的函数
f:{[t;c];:update v3:2 * c from t;} 

在这种形式下它不起作用。有什么建议我怎么能做到这一点? 感谢

2 个答案:

答案 0 :(得分:5)

另一种选择是使用update语句的功能形式。 https://code.kx.com/q/ref/funsql/#functional-sql

q)tbl:flip `sym`v1`v2!(`a`b`c`d; 50 280 1200 1800; 40 190 1300 1900)
q)parse"update v3:2*x from t"
!
`t
()
0b
(,`v3)!,(*;2;`x)
q){![x;();0b;enlist[`v3]!enlist(*;2;y)]} [tbl;`v2]
sym v1   v2   v3
------------------
a   50   40   80
b   280  190  380
c   1200 1300 2600
d   1800 1900 3800

答案 1 :(得分:3)

实现此目的的一个选择是使用@ amend

console.log(Object.getOwnPropertyNames(Object.getPrototypeOf(m)));

这会更新表q){[t;c;n] @[t;n;:;2*t c]}[tbl;`v1;`v3] sym v1 v2 v3 ------------------ a 50 40 100 b 280 190 560 c 1200 1300 2400 d 1800 1900 3600 中的列c,将新值保存为列t。您也可以更改此选项以允许您传递自定义函数:

n