kdb/q:使用 hopen 查询多个句柄



我希望能够一次查询多个句柄,其中表具有相同的格式,如下所示:

手柄: 8000,8001,8003 表: 福

想要执行以下操作:

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

所以我从每个句柄上的每个 foo 表中获取行。

有没有办法实现这一目标?

谢谢

使用"each"打开每个手柄

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

使用"应用每个左侧"将相同的查询发送到每个服务器

q)r:h@:"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

如果您不打算重复使用句柄,您可以这样做

q)raze`::8000`::8001`::8003@:"select from foo col1,col2"

与其他答案相同,但使用set(neg h(而不是get(h(更复杂

说明书/负载平衡在此示例中也有帮助。

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]}

向每个句柄发送"set"查询

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

等到所有消息都有响应

q)h .:()

最后,将结果放在一起

q)raze r h

唯一的优势是并发性。

正如@AlexanderBelopolsky指出的,不要忘记

q)hclose each h

最新更新