在 kdb 中注销后内存中没有 table

No table in memory after logout in kdb

当我退出会话时,我的 table 被删除。

我该怎么办,所以当我连接到 kdb 时,我再次看到我的 tables。

我的 tables 应该包含几个月的数据,这些数据是从文件中增量添加的。其他人也应该可以访问它们。

PS:当然,我明白了,我可以将它们保存到文件中,然后再恢复。但是我需要它们在内存中而不保存到任何文件

简单示例

我load/createtable

rlwrap $HOME/l64/l64/q
t:flip `c1`c2`c3!(`a`b`c;42;1.1)

Ctrl+z - 注销

rlwrap $HOME/l64/l64/q

没有tablet

如果这些是您定义的表,例如 t:flip `c1`c2`c3!(`a`b`c;42;1.1)

您可以创建一个 example.q 文件来定义它们。然后像这样启动 q:

rlwrap $HOME/l64/l64/q example.q

此外,我建议将 q 作为 rlwrap 的别名添加到 .bashrc,这样您就不必每次都输入它。

alias q='QHOME=~/q rlwrap -r ~/q/l32/q'

https://code.kx.com/q/learn/install/linux/

运行 rlwrap $HOME/l64/l64/q 再次打开一个 new q 会话。您不应该期望在那里看到另一个会话的 table。

如果您想将数据从一个 q 会话拉到另一个会话,您将需要使用 ipc。为此,您需要在第一个 q 会话中使用命令行标志打开一个端口:

rlwrap $HOME/l64/l64/q -p 5042

或来自流程本身:

q)\p 5042
q)t:flip `c1`c2`c3!(`a`b`c;42;1.1)

然后在第二个 q 过程中可以将 table 拉过来:

q)h:hopen`::5042
q)h`t
c1 c2 c3
---------
a  42 1.1
b  42 1.1
c  42 1.1
q)hclose h

同一台服务器上的任何其他人都可以连接到您的端口。如果您的 table 足够大(特别是如果它们是分区的),您需要小心其他用户可以使用的查询类型。我建议阅读 Permissions with kdb+.

上的 Kx 白皮书

你第二次 运行 q 你正在开始一个新的 q 会话。 如果您想重新连接到现有会话,请使用 fg

将其带回前台

要让其他用户访问这些表,您必须 运行 在端口上进行 q 并允许用户通过 hopen

访问和进行查询