2014-10-02 34 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