如何在kdb中更新多个表

如何在kdb中更新多个表,kdb,Kdb,假设我有一张桌子的清单。(sym1、sym2、sym3等) 如何向包含表名的名为Sym的每个表中添加新列 谢谢您可以使用以下内容: q){@[value x;`Sym;:;x]}each tables[] +`a`b`c`Sym!(0 1 2 3 4;0 1 2 3 4;0 1 2 3 4;`sym1`sym1`sym1`sym1`sym1) +`a`b`c`Sym!(0 1 2 3 4;0 1 2 3 4;0 1 2 3 4;`sym2`sym2`sym2`sym2`sym2) +`a`b`c

假设我有一张桌子的清单。(
sym1、sym2、sym3等)

如何向包含表名的名为
Sym
的每个表中添加新列


谢谢

您可以使用以下内容:

q){@[value x;`Sym;:;x]}each tables[]
+`a`b`c`Sym!(0 1 2 3 4;0 1 2 3 4;0 1 2 3 4;`sym1`sym1`sym1`sym1`sym1)
+`a`b`c`Sym!(0 1 2 3 4;0 1 2 3 4;0 1 2 3 4;`sym2`sym2`sym2`sym2`sym2)
+`a`b`c`Sym!(0 1 2 3 4;0 1 2 3 4;0 1 2 3 4;`sym3`sym3`sym3`sym3`sym3)
如果从
@
的第一个参数中删除
,这将更新相应的表

否则,由于这将返回列表,因此可以使用索引从列表中返回所需的表:

q)({@[value x;`Sym;:;x]}each tables[])0
a b c Sym
----------
0 0 0 sym1
1 1 1 sym1
2 2 2 sym1
3 3 3 sym1
4 4 4 sym1
希望这有帮助


詹姆斯

实现这一目标的另一种方法:

q){update Sym:x from x}each `sym1`sym2`sym3
q)raze (sym1;sym2;sym3)
p        s  Sym
----------------
2.08725  75 sym1
2.065687 6  sym1
2.058972 63 sym2
2.095509 62 sym2
2.036151 90 sym3
2.090895 63 sym3
如果将这些表(
sym1、sym2、sym3)作为另一个函数调用的输出,如:

f each `s1`s2`s3
然后我建议在返回这些单独的表之前,更新函数以添加列
Sym

f:{
   /some logic
   update Sym:x from t
  }

这将节省单独添加新列的操作

非常感谢