首页 > 解决方案 > 在 q 中为 .z.pg 处理程序编写逻辑

问题描述

我喜欢为 .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

并且客户端在 上进行一些查询(r)handle:hopen 5000;我的表 .ipc.history 填充了它包含的字段。

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

标签: kdb

解决方案


在我自己的测试中,您似乎可以按预期工作。最初,在不更改您的代码的情况下,在进行查询 h"1+1" 客户端后,我的表中填充了以下内容

time                          handle  user             query         result
--------------------------------------------------------------------------
                                                       ::            ::
2019.02.11D17:22:04.976012000 560    Liam McGrenaghan  2             2

您是使用正句柄同步查询,还是使用负句柄异步查询?.z.pg 适用于前者,而 .z.ps 适用于后者。在以下链接中还有更多关于使用 .z 函数进行监控的有用信息。https://code.kx.com/q/cookbook/using-dotz/

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

.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

推荐阅读