1

我把几行放在一起对我的 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函数。

4

1 回答 1

4

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

于 2013-05-21T16:11:08.890 回答