我已经将几张表加载到内存中
//the real table is huge
st:([] s:`a`a`a`b`b`b;n:3 5 7 3 5 7; v:`U20`U30`U50`U22`U33`U44)
//step function
st1:`s#select first v by s,n from st
//mapping function
f:{ (st1([] s:(),x 0;n:(),x 1))`v}
/Another table
t:([] s:`a`b`b;v:4 6 8)
//user input
MAP:([ KEY:`U20`U33`M40 ] VAL:200 330 440 )
有没有办法简化以下方法?在这里,我要为KEY
创建一个临时列lj
,然后将其删除
delete KEY from (update KEY:first each f each (s,'v) from t) lj MAP
答案 0 :(得分:3)
可以通过一行来完成,并通过形成表来索引到其他表来避免f。这应该通过避免每个连接和最后一行中的每个(
)来对其进行矢量化并使其更快q)update VAL:MAP[([]KEY:st1[([]s;n:v);`v]);`VAL] from t
s v VAL
-------
a 4 200
b 6 330
b 8
q)
答案 1 :(得分:2)
为什么不对列名进行同步,以便可以直接进行键表查找?
q)st:([] s:`a`a`a`b`b`b;v:3 5 7 3 5 7; KEY:`U20`U30`U50`U22`U33`U44)
q)st1:`s#select first KEY by s,v from st
q)t,'MAP st1 t
s v VAL
-------
a 4 200
b 6 330
b 8
答案 2 :(得分:0)
如果您可以将用户输入(当前是键控表)转换为字典
MAP2:`U20`U33`M40!200 330 440
MAP2
的新查询:
update VAL:MAP2@f each (s,'v) from t
实际上,以下内容更简单,更快:
update VAL:MAP2@f ( s;v) from t