如何更新kdb中的多个表
How to update multiple tables in kdb
假设我有一个 table 的列表。 (sym1, sym2, sym3
等)
如何向每个名为 Sym
且包含 table 名称的 table 添加一个新列?
谢谢
您可以使用类似的东西:
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)
如果您从 @
的第一个参数中删除 value
,这将更新 table 到位。
否则,由于此 return 是一个列表,您可以使用索引 return 列表中您想要的 table:
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
然后我会建议更新函数以在 return 这些单独的表之前添加列 Sym
。
f:{
/some logic
update Sym:x from t
}
这样就省去了单独添加新列的操作
假设我有一个 table 的列表。 (sym1, sym2, sym3
等)
如何向每个名为 Sym
且包含 table 名称的 table 添加一个新列?
谢谢
您可以使用类似的东西:
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)
如果您从 @
的第一个参数中删除 value
,这将更新 table 到位。
否则,由于此 return 是一个列表,您可以使用索引 return 列表中您想要的 table:
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
然后我会建议更新函数以在 return 这些单独的表之前添加列 Sym
。
f:{
/some logic
update Sym:x from t
}
这样就省去了单独添加新列的操作