2

我有一个大表,我想在 kdb+ 服务器中进行分区。分区代码位于我需要在服务器上评估的 Q 脚本中,但我没有对其进行 I/O 控制(服务器在后台运行,内存中的数据是通过 C API 加载的)。

到目前为止,我发现的唯一解决方案是打开一个句柄并将我的所有语句转换为字符串(所有那些我必须使用的 \" 看起来很乱):

if[4 <> count .z.x; 0N!"usage: part_md.q host port db_dir date (YYYY.MM.DD)"; exit[1]]

arg_host: .z.x 0
arg_port: .z.x 1
arg_db_dir: .z.x 2
arg_date: "D"$(.z.x 3)

/get server handle
h:hopen `$(":",arg_host,":",arg_port)
set_db: "db: \":",arg_db_dir, "/mydb/\""
set_sym_path: "sym_path: \":",arg_db_dir,"\""
h set_db
h set_sym_path

/select fields to partition
h "mydb_select: select [-10] A,B,C from mydb"

/enumerate symbols
h "md_select_enum: .Q.en[`$sym_path] md_select"
h "delete md_select from `."
...

如何在不使用同一台机器上的服务器句柄的情况下直接评估我的脚本?

4

2 回答 2

2

您可以使用 qStudio http://www.timestored.com/qstudio之类的 kdb IDE来发送查询,方法是像在控制台中一样输入命令。

其他几点建议:

  1. 阅读进程间通信的函数形式,替代总是发送字符串。更强大,因为它允许使用对象。

  2. 避免在变量名中使用下划线,因为它们也是 kdb 中的运算符。(请参阅此处了解 q 语言指南:http ://www.timestored.com/kdb-guides/q-coding-standards )

  3. 检查该sv功能的许多变体,特别是(` sv `:file,`name)它允许以独立于平台的方式快速形成文件路径。

问候, 瑞安

于 2013-05-17T21:44:16.437 回答
0

另一个选择是 studioForKdb+,尽管它没有提供 qstudio http://code.kx.com/wiki/StudioForKdb%2B那么多的功能

于 2013-05-18T06:09:15.477 回答