我有一个大表,我想将其分区加载到 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 `."
...
如何在不使用同一台计算机上的服务器句柄的情况下直接评估我的脚本?
最佳答案
您可以使用 kdb IDE,例如 qStudio http://www.timestored.com/qstudio通过输入命令来发送查询,就像在控制台上一样。
其他一些建议:
阅读进程间通信的函数形式,这是始终发送字符串的替代方法。更强大,因为它允许使用对象。
避免在变量名称中使用下划线,因为它们也是 kdb 中的运算符。 (有关 q 语言指南,请参阅此处:http://www.timestored.com/kdb-guides/q-coding-standards)
查看
sv
函数的许多变体,特别是(` sv `:file,`name)
它允许在独立于平台的情况下快速形成文件路径方式。
问候, 瑞安
关于kdb - 如何在运行的 KDB 服务器中评估 Q 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16616579/