如何破译此Q / KDB代码

时间:2014-08-23 04:40:28

标签: kdb

我需要理解这段代码。

raze(handle1, handle2, handle3)@\:({.myqueries.select_from_all[`some_table] . (a;b;c;();();0b);p1,p2;`})

基本上,我们的想法是从同一个表中的三个数据库中选择数据。

@\:在这种情况下做了什么?为什么我们{}内有()

.之后select_from_all[`some_table]的含义是什么?

1 个答案:

答案 0 :(得分:4)

查看您提供的代码,看起来可能会遗漏一些内容 - 我会告诉您代码所处的预期形式:

raze(listOfHandles)@\:({[x;y] funcUsingXandY};arg0;arg1)

where:
      listOfHandles - a list of handles to remote processes
      @\: - apply the right hand side to each item in the left hand side list
      ({[x;y] funcUsingXandY};arg0;arg1) - this sends a function definition (lambda) + args for the function, to be executed on each of the handles.

示例(假设有进程侦听localhost,端口7070和7071):

q) handle1:hopen 7070;
q) handle2:hopen 7071;
q) raze(handle1,handle2)@\:({[x;y] enlist(.z.p; x+y)}; 39;3)
    2014.08.23D14:11:15.452611000 42
    2014.08.23D14:11:15.452847000 42

在上面的示例中,我们在每个远程句柄{[x;y] enlist(.z.p; x+y)}(39;3)上使用args handle1执行函数handle2 - 我们得到当前时间的响应(.z.p)&我们对每个句柄的响应中两个args的总和。 raze将从每个句柄返回的结果连接到一个列表中(在您的示例中,看起来该函数返回一个表 - 在这种情况下,raze将加入表的列表返回处理,在一个表中)

修改:我错过了关于.的问题的部分 - 。允许您将参数列表应用于采用多个参数的函数 - 例如:

q)plus:{[x;y] x+y}
q)plus . (4;5)
    9

有关详细信息,请参阅: