2014-10-02 26 views
0

我有一个splayed表,我可以从罚款选择数据。kdb splayed表元错误

当我尝试查看元数据时,出现`sym错误。任何人都可以提出为什么会发生这种情况的原因?

q)meta tablename 
k){$[(20h>t)|77h<t:@x;`;98h>@. t:!x;`;t]} 
'sym 
.: 
`sym 
q.Q)) 
+0

负载在符号文件 - 应该拿加载时的分贝启动,真的。 – 2014-10-02 15:52:28

+0

我试过\ l path/sym,但是当我加载这个时,表格不再可用。有什么特别的方法可以加载sym文件吗?它不会自动加载。 – Hopper06 2014-10-02 16:04:38

+0

历史数据库的根目录是否包含sym文件?你可以做'get \':sym'来读取文件吗?只要sym文件在hdb的根目录下,它应该被读入。所以如果你用'\ l/root/to/hdb'来加载所有表格+ sym文件 – 2014-10-02 16:35:06

回答

1

由于枚举的sym文件丢失,您正在收到错误。正常情况下,Q解释器会将其查找到splayed目录之上的一个目录。

对于例如:如果你给一个保存命令是这样的:

 q) t:([]sym:`a`b;id:1 2) 

     q) `:/home/test/t/ set .Q.en[`:test] t 

它将创建目录“T”内/首页/张开表“T”和创建目录枚举“符号”文件测试/家/测试。

要装入此表:

 q)\l /home/test 

另一件事是,你还可以加载列举的“符号”文件中手动像这样:

 q)sym:get `:path to sym file 

在内存中的所有表都将自动被映射到这个新的名单。

参考: http://code.kx.com/q4m3/14_Introduction_to_Kdb+/#1422-splayed-tables-with-symbol-columns

+0

是的!手动加载命令是我所需要的,因为我的sym文件不在标准位置。这工作!非常非常感谢你。 @glenny,我知道你也提到了这一点,但是从你的解释我也不太了解。不过,谢谢您花时间回答。我感谢大家的帮助。 – Hopper06 2014-10-02 17:38:38

2

枚举向量未加载到会话中。要在hdb分区内复制启动q - 展开的表格都是有效的,但由于sym未加载,meta将失败。

[email protected]:~>q hdb1/ 

q)2#trades 
sym time       src price size 
------------------------------------------------ 
3 2014.04.22D08:00:00.937000000 10 25.02 5167 
3 2014.04.22D08:00:04.567000000 9 25.05 3376 
q)meta trades 
k){$[(20h>t)|77h<t:@x;`;98h>@. t:!x;`;t]} 
'sym 
.: 
`sym 
q.Q))\\ 

q)sym:get`:../sym 
q)meta trades 
c | t f a 
-----| ----- 
sym | s p 
time | p 
src | s 
price| f 
size | i 

一切顺利!

+0

是否有一个特定的地方一个sym文件是为了存储?我有一种感觉,我的问题源于我的sym文件不在正确的目录中。 – Hopper06 2014-10-02 15:57:46

+0

我正在使用脚本来创建并展开表格,并且该脚本正在将sym文件存储在另一个目录中。所以它不会“自动”将sym文件放在“应该”的位置。除了“位于展开的表格文件之上的目录?”之外,你能否更具体地说明它应该在哪里?以上有多高?在与tablename文件夹相同的目录中?我试过了,它不工作... – Hopper06 2014-10-02 16:06:49

+0

>在与tablename文件夹相同的目录中?我已经尝试过了,但它不起作用。 你能详细说明一下吗?例如,它应该像标准方式一样工作,例如 Q)T:([]一个:1_til 10; B:反向1_til 10;符号:9'3;时间:9#.zp) Q)':hdb1 /表/设置.Q.en [' :hdb1] T, 虽然如果SYM文件是在一个不规范的地方,然后将其加载到正确的方式去,是不是“\ L /路径/到/ SYM”你在你的文章中提到的命令,但使用'加载'例如 load':./路径/到/符号 – glenny 2014-10-02 16:35:56