kdb/q:用hopen查询多个句柄
kdb/q: Query multiple handles with hopen
我希望能够一次查询多个句柄,其中 table 具有相同的格式,例如:
句柄数:8000,8001,8003
tables: foo
想做类似的事情:
x:hopen `8000`8001`8003
x select from foo col1,col2
所以我从每个句柄上的每个 foo table 中获取行。
有办法实现吗?
谢谢
使用'each'希望每个句柄
q)h:hopen each 8000 8001 8002
q)h
476 480 484i
使用 apply each-left 向每个服务器发送相同的查询
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) 更复杂
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]}
向每个句柄发送 "set" 查询
q)(neg h)@\:({(neg .z.w)value"select col1,col2 from foo"};`)
等到所有消息都有回复
q)h .\:()
最后,把结果放在一起
q)raze r h
唯一的优势是并发。
正如@AlexanderBelopolsky指出的,不要忘记
q)hclose each h
我希望能够一次查询多个句柄,其中 table 具有相同的格式,例如:
句柄数:8000,8001,8003 tables: foo
想做类似的事情:
x:hopen `8000`8001`8003
x select from foo col1,col2
所以我从每个句柄上的每个 foo table 中获取行。
有办法实现吗?
谢谢
使用'each'希望每个句柄
q)h:hopen each 8000 8001 8002
q)h
476 480 484i
使用 apply each-left 向每个服务器发送相同的查询
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) 更复杂
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]}
向每个句柄发送 "set" 查询
q)(neg h)@\:({(neg .z.w)value"select col1,col2 from foo"};`)
等到所有消息都有回复
q)h .\:()
最后,把结果放在一起
q)raze r h
唯一的优势是并发。
正如@AlexanderBelopolsky指出的,不要忘记
q)hclose each h