2017-07-26 8 views
2

Je voudrais pouvoir interroger plusieurs poignées à la fois, où les tables ont le même format comme:KDB/q: interroger plusieurs poignées avec hopen

poignées: 8000,8001,8003 tables: foo

Vous voulez faire quelque chose comme:

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

donc j'obtiens des lignes de chaque table foo sur chaque poignée.

Existe-t-il un moyen d'y parvenir?

Merci

Répondre

3

Utilisez chaque 'pour Hopen chaque poignée

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

Utilisation Appliquer chaque-gauche pour envoyer la même requête à chaque serveur

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) 

Ensuite, vous aurez pour raser le résultat:

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

Merci va essayer dès que possible –

+0

Vous êtes les bienvenus, laissez-moi savoir si vous avez des questions .. – jomahony

+1

N'oubliez pas 'HFerme chaque h '. –

1

Si vous ne prévoyez pas de réutiliser les poignées, vous pouvez faire

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

et peut utiliser la pêche afin que les demandes sont envoyées immédiatement –

+0

Je vais probablement les réutiliser mais merci Alexander. –

+0

Jack pouvez-vous élaborer sur l'utilisation de la pêche? –

0

même que d'autres réponses, mais plus compliqué en utilisant set (neg h) plutôt que de se (h)

Le cookbook/load-balancing aide dans ce exemple, aussi.

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

Définir le rappel pour la réponse des serveurs

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

Envoyer un "set" requête à chaque poignée

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

Attendez que tous les messages ont une réponse

q)h .\:() 

Enfin, mettre le résultat ensemble

q)raze r h 

Le seul avantage est la concurrence.

Comme @AlexanderBelopolsky souligné, ne pas oublier

q)hclose each h 
+0

merci à tous, va essayer. –