我喜欢编写一个脚本,该脚本根据客户端选择的文件句柄在.z.pg和.z.ps之间进行选择,并将结果插入下表:
.ipc.history:enlist`startTime`endTime`event`handle`user`query`result`success!(0Np;0Np;`;0Ni;`;::;::;0b)
我使用了以下逻辑:
.ipc.logQuery:{[event;x]
start:.z.p; r:get x;end:.z.p-start; 0b; //suc:{0b<>@[value;x;0b]};
`.ipc.history insert (start;end;event;.z.w;.z.u;x;r;0b);r}
.z.pg:.ipc.logQuery`.z.pg;
.z.ps:.ipc.logQuery`.z.ps;
我在听:
q queryHistory2.q -p 5050
但是当客户端使用命令连接时,我会收到“类型错误”:
q)h:hopen 5050
q)h"2+2"
'type
答案 0 :(得分:4)
类型错误来自“结束”列。您已将其定义为时间戳,但是当您减去2个时间戳时,Q返回时间跨度类型。
q) a: .z.p
q) b: a -1000
q) type 0N!a-b
q) (0D00:00:00.000003000 ;-16h)
要解决此问题,您需要将列的类型更改为时间跨度。
q) .ipc.history:enlist`startTime`endTime`event`handle`user`query`result`success!(0Np;0Nn;`;0Ni;`;::;::;0b)
q) `.ipc.history insert(a;.z.p-a;`.z.pg;.z.w;.z.u;"2+2";get "2+2";0b)
startTime endTime event handle user query result success
------------------------------------------------------------------------------------------------
:: :: 0
2019.02.12D15:15:55.009781000 0D00:06:21.092914000 .z.pg 0 user "2+2" 4 0
其他选择是在结束列中存储纳秒(或毫秒),而不是时间跨度。
您只需将时间跨度转换为long即可将时间跨度转换为纳秒。
q)`long$end
为此,请将列类型更改为long。
q) .ipc.history:enlist`startTime`endTime`event`handle`user`query`result`success!(0Np;0Nj;`;0Ni;`;::;::;0b)