【问题标题】:How to correctly enum and partition a kdb table?如何正确枚举和分区 kdb 表?
【发布时间】:2013-05-21 15:31:34
【问题描述】:

我整理了几行来对我的 kdb 表进行分区,其中当然包含字符串列,因此必须枚举。

我想知道这段代码是否完全正确,或者是否可以进一步简化。特别是,考虑到内存表和磁盘表将具有完全相同的布局,我对创建分区表模式的需要有些怀疑。此外,可能还有一种方法可以避免创建临时的 tbl_memtbl_mem_enum 表:

...
tbl_mem: select ts,sym,msg_type from oms_mem lj sym_mem;
tbl_mem_enum: .Q.en[`$sym_path] tbl_mem;
delete tbl_mem from `.;

(`$db;``!((17;2;9);(17;2;9))) set ([]ts:`time$(); ticker:`symbol$(); msg_type:`symbol$());
(`$db) upsert (select ts,ticker:sym,msg_type from tbl_mem_enum)
delete tbl_mem_enum from `.;

PS:我知道,我不应该使用“_”来命名变量,但是我应该用什么来分隔变量或函数名中的单词呢? . 也是一个 kdb 函数。

【问题讨论】:

    标签: kdb


    【解决方案1】:

    我认为您的意思是您的表包含符号列 - 这些是您需要枚举的列(字符串不需要枚举)。您可以一步完成写入和枚举。此外,如果您在所有列上使用相同的压缩算法/级别,则使用 .z.zd 可能更容易:

    .z.zd:17 2 9i;
    (`$db) set .Q.en[`$sym_path] select ts, ticker:sym, msg_type from oms_mem lj sym_mem;
    

    一般建议使用 camelCase 而不是 '_'。这里有一些有用的信息:http://www.timestored.com/kdb-guides/q-coding-standards

    【讨论】:

    • 它适用于我的本地脚本,但随后我尝试使用字符串格式通过连接处理程序运行相同的命令,并且它不会将表存储在磁盘上。如果在使用连接处理程序时无法使其工作,我将发布另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-27
    • 2023-04-01
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多