kdb q 中是否有类似 printf 的函数?我正在尝试将双字段格式化为 4 位精度。等效的 printf 格式是“%.04f”。
我可以访问一个实时 KDB 服务器,该服务器具有每毫秒到达的新数据表。
目前,我只是使用一种简单的方法,它基本上是这样的:
.z.ts:{
newData: getNewData[]; / get data arriving in the last second
data::data uj newData;
};
\t 100;
Run Code Online (Sandbox Code Playgroud)
确保我的数据(名为data)不断更新。
然而,uj它非常慢(可能是由于内存的不断重新分配)并且轮询只是很尴尬。
我听说 KDB 旨在擅长处理这种流式刻度数据,那么有更好的方法吗?也许一些不需要的基于推送的方法uj?
我有一个表格,其中包含一个具有以下格式数据的列 - 让我们将列称为“标题”,将表格称为“s”
标题
ab.123
ab.321
cde.456
cde.654
fghi.789
fghi.987
Run Code Online (Sandbox Code Playgroud)
我正在尝试获取“.”之前的字符的唯一列表。所以我最终得到了这个:
ab
cde
fghi
Run Code Online (Sandbox Code Playgroud)
我尝试将初始列选择到表格中,然后尝试进行更新以使用“ss”创建一个新列,该列是点的位置。
像这样:
t: select title from s
update thedot: (title ss `.)[0] from t
Run Code Online (Sandbox Code Playgroud)
然后我打算尝试做第三列,它是“标题”中的“N”个字符,其中 N 是存储在“thedot”列中的值。
我尝试更新时得到的只是“类型”错误。
有任何想法吗?我对 kdb 很陌生,所以毫无疑问以一种非常愚蠢的方式做一些简单的事情。
我们有一个股票行情工厂,有时有人错误地在没有日期的 HDB 中运行查询,或者在没有时间的 RDB 中运行查询,或者使用一些其他处理逻辑,这可能会杀死 KDB。我们如何在不重新启动 KDB 实例的情况下找到并终止查询?
如何使用字符串作为变量名?
我希望在运行时构造我的变量名,但是如何将其用作左参数并为其分配值?
例子:
[`$"test"] : 1 / 'assign error
Run Code Online (Sandbox Code Playgroud) 非常愚蠢的问题......考虑下面按 sym 排序的表 t1。
t1:([]sym:(3#`A),(2#`B),(4#`C);val:10 40 12 50 58 75 22 103 108)
sym val
A 10
A 40
A 12
B 50
B 58
C 75
C 22
C 103
C 108
Run Code Online (Sandbox Code Playgroud)
我想选择与每个符号对应的第一行,如下所示:
(`sym`val)!(`A`B`C;10j, 50j, 75j)
sym val
A 10
B 50
C 75
Run Code Online (Sandbox Code Playgroud)
必须有一个单线来做到这一点。要获取每个符号的最后一行,就像select by sym from t1. 任何提示?
考虑下表:
sym A B
X 1 2
Y 4 1
X 6 9
Z 6 3
Z 3 7
Y 1 8
Run Code Online (Sandbox Code Playgroud)
我想为我的每个符号 X、Y 和 Z 找到最小 A 值和最大 B 值,并将它们显示在新表中,即
sym minA maxB
X 1 9
Y 1 8
Z 3 7
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)
谢谢您的帮助
我有一个有点大的表(保存时约为 3GB),位于名为“data”的变量中。
我可以将其保存到文件中:
save `:data.csv
Run Code Online (Sandbox Code Playgroud)
但是,如果我尝试使用不同的文件名保存它,则会收到错误:
sd: 2017.12.08;
string[sd],".csv" set data
ERROR: 'limit
(tried to generate a list with more than 2,000,000,000 elements (keep in mind that any IPC result is a byte list, hence can't be longer than 2 metric Gb))
Run Code Online (Sandbox Code Playgroud)
我怎样才能克服这个错误?我尝试了多种方法,我确信这很简单,但无法找到解决方法。
在 4.0 中,如何阻塞控制流,直到句柄上收到任何消息?
\n在 3.6 版本中,我可以使用https://code.kx.com/q/basics/ipc/#block-queue-flushr:h[]中描述的技术
r:h[]但从 4.0 开始,即使我从第二个进程发送类似的内容,呼叫也会永远挂起key[.z.W]@\\:".z.i"(对于 3.6,这是第二个进程有点挂起:它开始成为进程 1 的从属进程,只为它提供服务)请求,但在 4.0 中,进程 1 永远挂起,仅响应进程 2)
这是我在2019.04.02 3.6看到的:
\n \xe2\x94\x82q)\\p 15555\nq)h:hopen`::15555 \xe2\x94\x82q)\nq) \xe2\x94\x82q).z.W\nq)h[] \xe2\x94\x825|\n// blocked \xe2\x94\x82q)5i".z.i"\n".z.i" \xe2\x94\x82// blocked\nq)q) \xe2\x94\x82// blocked\nRun Code Online (Sandbox Code Playgroud)\n