如何在运行的KDB服务器中评估Q脚本?

如何在运行的KDB服务器中评估Q脚本?,kdb,Kdb,我有一个大表,我想在kdb+服务器中加载它。分区代码在一个Q脚本中,我需要在服务器上对其进行评估,但我没有对其进行I/O控制(服务器在后台运行,内存中的数据是通过C API加载的) 到目前为止,我找到的唯一解决方案是打开一个句柄,并将所有语句转换为字符串(我必须使用的所有语句看起来都很混乱): if[4 count.z.x;0N!”用法:part_md.q主机端口db_dir日期(YYYY.MM.DD)”;退出[1]] arg_主机:.z.x 0 arg_端口:.z.x 1 arg_db_目录:

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

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

if[4 count.z.x;0N!”用法:part_md.q主机端口db_dir日期(YYYY.MM.DD)”;退出[1]]
arg_主机:.z.x 0
arg_端口:.z.x 1
arg_db_目录:.z.x 2
参数日期:“D”$(.z.x 3)
/获取服务器句柄
h:hopen`$(“:”,arg\u主机“:”,arg\u端口)
设置\u db:“db:\”:“,arg\u db\u dir,”/mydb/\“”
设置sym路径:“sym路径:\:”,arg\u db\u dir“
h集_db
h设置sym路径
/选择要分区的字段
h“mydb_选择:从mydb中选择[-10]A、B、C”
/列举符号
h“md_select_enum:.Q.en[`$sym_path]md_select”
h“删除md_从“”中选择”
...

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

您可以使用类似qStudio的kdb IDE,通过输入命令发送查询,就像在控制台上一样

其他几点建议:

  • 阅读inter process of communication的函数形式,这是一种始终发送字符串的替代方法。它允许使用对象,因此功能更强大

  • 避免在变量名中使用下划线,因为它们也是kdb中的运算符。(参见此处了解q语言指南:)

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

  • 问候,,
    Ryan

    另一个选项是studioForKdb+,尽管它没有qstudio提供那么多的功能

    我使用q-lab进行交互式查询。我将看一看qstudio。对于这个特定的问题,这是一个每天都在运行的任务来划分我的数据库。选项1)听起来是最好的方法。
    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 `."
    ...