Kdb 在q中为.z.pg处理程序编写逻辑

Kdb 在q中为.z.pg处理程序编写逻辑,kdb,Kdb,我喜欢为.z.pg编写一个逻辑,因此当远程客户端从端口登录时,我的表将填充某些信息,例如: .ipc.history:enlist`time`handle`user`query`result!(0Np;0Ni;`;::;::) 所以我写了以下逻辑: .z.pg:{[x] r:value x;`.ipc.history insert (.z.p;.z.w;.z.u;value x;r);r} 基于: .z.pg:{[x]0N!(`zpg;x);value x } 我假设x是类似于

我喜欢为.z.pg编写一个逻辑,因此当远程客户端从端口登录时,我的表将填充某些信息,例如:

.ipc.history:enlist`time`handle`user`query`result!(0Np;0Ni;`;::;::)
所以我写了以下逻辑:

.z.pg:{[x] r:value x;`.ipc.history insert (.z.p;.z.w;.z.u;value x;r);r}
基于:

     .z.pg:{[x]0N!(`zpg;x);value x  }
我假设x是类似于“1+1”的查询

因此,当我在端口上收听时:

q queryHistory1.q -p 5000
客户端对
句柄:hopen 5000
执行一些查询(r);my table.ipc.history使用它包含的字段进行计算


虽然我没有收到错误,但我的表是空的。

在我自己的测试中,您所做的工作似乎与预期的一样。最初,在不更改代码的情况下,在查询h“1+1”客户端之后,我的表填充了以下内容

time                          handle  user             query         result
--------------------------------------------------------------------------
                                                       ::            ::
2019.02.11D17:22:04.976012000 560    Liam McGrenaghan  2             2
您是使用正句柄同步查询,还是使用负句柄异步查询。z、 pg适用于前者,而.z.ps适用于后者。在下面的链接中还有更多关于使用.z函数进行监控的有用信息

此外,您可能希望在表中显示原始查询本身,而不是查询的计算结果,如果是这种情况,则只需使用

.z.pg:{[x] r:value x;`.ipc.history insert (.z.p;.z.w;.z.u;x;r);r}
其中x已替换值x。然后返回的表可能更符合您的要求

time                          handle user             query         result
-------------------------------------------------------------------------

2019.02.11D17:24:25.008643000 560    Liam McGrenaghan "1+1"         2

您的代码运行良好。唯一的错误是计算x两次,一次使用
r:value x
,另一次使用
value x
。但这并不影响对用户的响应,也不影响对跟踪表的插入——这一切都很好。您可能有兴趣在这里查看Simons的解决方案:他写了一系列关于客户跟踪、使用情况跟踪、访问控制等的解决方案。或者最近在这里编写了Toms白皮书:如果我更改“值x”在insert语句中插入x以填充`查询列,这会给我“1+1”吗?所以我的表没有填充的问题在哪里?谢谢,我把值x改成了x,我使用的是正句柄。