Q编程语言有一个相关的shell.如何访问shell中的最后一个输入?例如,如果我输入:
q) a:45
Run Code Online (Sandbox Code Playgroud)
在下一个提示中q),我想a:45通过按向上箭头(如bash)恢复,但是,这在Q控制台中不起作用.什么工作?
我将字符串存储在变量名res下的列表中.接下来,我构建一个查询字符串列表的查询.然而,似乎没有读取变量.
这就是我的意思:
q) hdl: (to a port)
q) res: `string1`string2`string3
**q) ans: hdl"select count i by date,sym from trade where date=xxx, sym in `res"**
Run Code Online (Sandbox Code Playgroud)
当我执行命令时,我总是得到一个空的结果集.我知道结果集不能为空.那么如何修复我的查询(以粗体显示)以返回结果?
请注意我正在unix框中的aq会话中执行任务.
我们有一个股票行情工厂,有时有人错误地在没有日期的 HDB 中运行查询,或者在没有时间的 RDB 中运行查询,或者使用一些其他处理逻辑,这可能会杀死 KDB。我们如何在不重新启动 KDB 实例的情况下找到并终止查询?
我在:创建了一个变量:
q)myvar: 1
Run Code Online (Sandbox Code Playgroud)
我该如何删除它?我试过了:
q)delete myvar from `.z
Run Code Online (Sandbox Code Playgroud)
但是命名空间`.z显然不是正确的,因为变量仍然存在:
q)myvar
1
Run Code Online (Sandbox Code Playgroud) 我有一个包含多个列的表("ibmqt"),我想添加一个新列,其中包含布尔值,指示每一行是否有一列("bid")大于或等于另一列("问").
到目前为止,我最成功的尝试是:
ibmqt: update (pricecross:select bid>=ask from ibmqt) from ibmqt
Run Code Online (Sandbox Code Playgroud)
但是,这导致以下结果:
time sym bid ask bsize asize pricecross
----------------------------------------------------
00:00:59.063 IBM 43.53 43.57 10000 9000 (,`ask)!,0b
00:01:03.070 IBM 43.54 43.59 6500 3000 (,`ask)!,0b
00:02:31.911 IBM 43.56 43.6 500 4500 (,`ask)!,0b
00:03:43.070 IBM 43.56 43.56 10000 2500 (,`ask)!,1b
00:06:01.170 IBM 43.54 43.56 8500 4500 (,`ask)!,0b
00:06:11.081 IBM 43.56 43.58 500 1500 (,`ask)!,0b
00:08:15.126 IBM 43.55 43.57 1500 9000 (,`ask)!,0b
Run Code Online (Sandbox Code Playgroud)
显然,在"pricecross"栏中,我只想要0,0,0,1,0等.
有什么建议?
如何使用功能方式更新q词典中的值?
例:
x: `1`2`3;
d: x!x;
show[d];
// d ->
// 1 | 1
// 2 | 2
// 3 | 3
// TODO change d:
show[d];
// d ->
// 1 | 11
// 2 | 22
// 3 | 3
Run Code Online (Sandbox Code Playgroud) 假设我的kdb +数据库有几个表.如何将所有表导出到csv文件,其中每个csv的名称与表名相同?
斐波那契很好:
f:|+\
5 f\1 1
Run Code Online (Sandbox Code Playgroud)
但我没有找到帕斯卡三角形的类似表达.这是我能得到的最好的:
q){x+\\x#1}6
1 1 1 1 1 1
1 2 3 4 5 6
1 3 6 10 15 21
1 4 10 20 35 56
1 5 15 35 70 126
1 6 21 56 126 252
1 7 28 84 210 462
Run Code Online (Sandbox Code Playgroud) 我有一个 aq 脚本C:\some\path\startup.q,可以将其他几个 q 脚本加载到当前会话中,如下所示
\l C:\some\other\path\script1.q
\l C:\some\other\path\script2.q
\l C:\some\other\path\script3.q
Run Code Online (Sandbox Code Playgroud)
现在,我可能想检查多个路径等script1.q。例如,当我处于部署环境而不是本地环境中时,这些路径是不同的。所以我想尝试捕获负载操作符
@[\l;C:\some\other\path\script1.q;`errormessage]
Run Code Online (Sandbox Code Playgroud)
这当然是无稽之谈。但我在 q 中找到了此处system描述的命令。例如
\w / lists memory usage
system "w" / same command
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于\l
system "l C:\some\path\startup.q"
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
在kdb + / q中,如何通过一系列功能通过管道传递数据,以使上一步的输出成为下一步的输入?
例如:
q)t:([]sym:`a`c`b;val:1 3 2)
q)`sym xkey `sym xasc t / how to achieve the same result as this?
Run Code Online (Sandbox Code Playgroud)
我猜想有些变化over或/可以工作:
?? over (xasc;xkey)
Run Code Online (Sandbox Code Playgroud)
优点:如何实现t从右侧插入的方式(本着q语法左右读法的精神)?
(xasc;xkey) ?? t
Run Code Online (Sandbox Code Playgroud)