2017-07-26 44 views
2

处理我希望能够在一次查询的几个把手,其中表有这样相同的格式:KDB/Q:查询多个与霍

手柄:8000,8001,8003 表:FOO

想要做的事,如:

x:hopen `8000`8001`8003 
x select from foo col1,col2 

所以我从每个处理每个foo的表行。

有没有办法做到这一点?

谢谢

回答

3

使用“每个”到霍各处理

q)h:hopen each 8000 8001 8002 
    q)h 
    476 480 484i 

使用每个应用从左上到相同的查询发送到每个服务器

q)r:[email protected]\:"select col1,col2 from foo" 
    q)r 
    +`col1`col2!(1 2;2 3) 
    +`col1`col2!(1 2;2 3) 
    +`col1`col2!(1 2;2 3) 

那么你就必须凌辱结果:

q)show res:raze r 
col1 col2 
--------- 
1 2 
2 3 
1 2 
2 3 
1 2 
2 3 
+0

感谢会尝试尽快 –

+0

不客气,让我知道,如果你有任何问题.. – jomahony

+1

不要忘了'H关闭各为H '。 –

1

如果您不打算重用手柄,你可以做

q)raze`::8000`::8001`::[email protected]\:"select from foo col1,col2" 
+0

并且可以使用桃子,以便立即发送请求 –

+0

我可能会重复使用它们,但是谢谢亚历山大。 –

+0

杰克能否请您详细说明桃子的使用方法? –

0

像其他的答案,但使用一套(NEG 2H),而不是得到(H)

cookbook/load-balancing帮助这更复杂也是例子。

q)h:hopen each 8000 8001 8002 
q)h 
476 480 484i 
q)r:(0#0i)!()    /dictionary of handles and results 

设置回调来自服务器的响应

q).z.ps:{@[`r;.z.w;:;x]} 

发送一个 “设置” 查询到每个处理

q)(neg h)@\:({(neg .z.w)value"select col1,col2 from foo"};`) 

等待,直到所有信息都具有响应

q)h .\:() 

最后,把结果放在一起

q)raze r h 

唯一的好处是并发性。

由于@AlexanderBelopolsky指出,不要忘记

q)hclose each h 
+0

感谢所有人,会给它一个镜头。 –