2013-04-18 78 views
1

我寫了一個q腳本來創建一個分區表,並從之前保存的大型kdb文件中插入行。該腳本僅保存我從命令行傳入的特定日期的數據。如何刪除kdb分區表內容?

如何在腳本開始時清除分區表的內容?或者一般來說,如果我不止一次運行腳本,我如何確保表格內容不會重複?

+0

如果你的腳本使用'.Q.dpft []'寫信給每個分區,那麼你就不需要擔心重複:該功能將覆蓋該日期的表中現有的數據。 – mollmerx

回答

3

將假設按日期的分區,這樣的目錄結構:

2012.04.03 
      /trade 
2012.04.04 
      /trade 
2012.04.05 
      /trade 
       /ticker 
       /price 
       /size 
  1. 要清除的內容爲一個日期只是刪除該文件夾,然後\l

  2. 爲了避免重複檢查,如果存在先那天的數據:

    select count i from trade where date=2012.04.06

如果一個日期的數據可能來自不同的文件,這使得它棘手。你可能想要添加一個sourceFile列和或作爲一個單獨的表來跟蹤哪些文件被加載。

+0

你是什麼意思的「然後\」? –

+1

他意味着您必須重新映射表以查看更改。參見http://code.kx.com/wiki/JB:KdbplusForMortals/partitioned_tables#1.3.5_Modifying_Partitioned_Tables – user1895961

+0

@RobertKubrick它是'\ l',順便說一句,不是'\ |' – mollmerx

1

您還可以將刪除過程合併到q函數中。 說你寫的位置是在格式:

/hdb/date/tablename/colname 

q) db1:"/hdb/date"; /you can pass this as a argument in a function 

q) deletedb:{[dbname] systemcmd: "rm -rfv ",dbdelete; system systemcmd} 

q) deletedb db1