首页 > 解决方案 > KDB:使用具有两个变量的递归函数发出问题

问题描述

我尝试以几种不同的方式执行以下操作,但到目前为止还没有成功。

我有一个像这样的表列表:

.rsk.list
extract1.csv | +`date`code etc.
...

我可以像这样调用表格 .rsk.list[`extract1.csv] 或者我可以删除 .rsk.list 以获取所有提取的表格。除了它不是真正的表(类型 0b)

我的目标是复制一些摘录,比如说toload:`extract1.csv`extract5.csv到第二个表,我们称之为 .rsk.list2

我已经尝试了很多变体

tmp:{.rsk.risk[x]} each toload    \which works
{.rsk.list2[x]:y}[each toload;each tmp}   \which does not

如果您知道如何进行上述工作或如何将 raze .rsk.list 投射到表格中,我将永远感激不尽。

标签: loopskdb

解决方案


为了有效地加入,extract1.csvextract5.csv将有助于了解他们的样子。

当您raze列出不符合要求的表时,它将生成字典的混合列表(类型 0),例如:

q).rsk.list:`1.csv`2.csv!(([]a:`a`b`c;b:til 3);([]c:`d`e`f;d:2*til 3))
q).rsk.list[`1.csv]
a b
---
a 0
b 1
c 2
q).rsk.list[`2.csv]
c d
---
d 0
e 2
f 4
q)raze .rsk.list
`a`b!(`a;0)
`a`b!(`b;1)
`a`b!(`c;2)
`c`d!(`d;0)
`c`d!(`e;2)
`c`d!(`f;4)

q)type raze .rsk.list
0h

一种方法正在使用ujover(/)但这是否达到预期结果取决于您的用例:

q)(uj/) .rsk.list[`1.csv`2.csv]
a b c d
-------
a 0
b 1
c 2
    d 0
    e 2
    f 4

这是一张桌子,但不一定有用


推荐阅读