参数化kdb q脚本

时间:2018-10-24 02:17:10

标签: kdb parameterization

我正在编写一个kdb / q脚本,它将以某种方式提示用户输入,然后将该输入添加到其他几种预先格式化的查询中。关于如何提示/接受输入和参数化查询的建议?

4 个答案:

答案 0 :(得分:3)

您可以使用read0 0接受用户输入,等待将捕获所有用户类型,直到他们按Enter。然后,输入将作为字符串返回。您可以将其键入到活动的q会话中,也可以将其包装成如下函数:

q)f:{a:read0 0;show a}
q)f[]
12
"12"

在这种情况下,我键入了12,它以字符串"12"的形式返回。

对于参数化查询,这可以通过字符串完成,但是可以这么说。您最好将输入转换为其他类型,并使用函数形式甚至标准选择,例如:

q)tab:([]a:1 2 3 4)
q){input:"J"$read0 0;select from tab where a=input}[]
4
a
-
4

您可以在Kx Wiki上详细了解functional form

答案 1 :(得分:3)

您也可以使用.z.x.Q.opt将输入作为命令行参数传递:

$ q -item cam
q)p:.Q.opt .z.x
q)p`item
item| "cam"

q)select from tab where items=first `$p`item
items sales prices
------------------
cam   0     15

答案 2 :(得分:2)

检出read0以从控制台读取输入。

q)rl:{1">> "; value "select from tab where items=`",read0 0}
q)rl`
>> cam
items sales prices
------------------
cam   0     15

答案 3 :(得分:2)

对于用户输入,可以在文件句柄read0(标准输入)上使用0。用户提示符将被打印到标准输出(文件描述符1),如下所示:

1 "Please give me some input: ";
input: read0 0;

对于查询参数化,您可以按照here (code.kx.com)

进行功能查询形式的字符串连接