2017-07-26 85 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

感謝所有人,會給它一個鏡頭。 –