我寫了一個q腳本來創建一個分區表,並從之前保存的大型kdb文件中插入行。該腳本僅保存我從命令行傳入的特定日期的數據。如何刪除kdb分區表內容?
如何在腳本開始時清除分區表的內容?或者一般來說,如果我不止一次運行腳本,我如何確保表格內容不會重複?
我寫了一個q腳本來創建一個分區表,並從之前保存的大型kdb文件中插入行。該腳本僅保存我從命令行傳入的特定日期的數據。如何刪除kdb分區表內容?
如何在腳本開始時清除分區表的內容?或者一般來說,如果我不止一次運行腳本,我如何確保表格內容不會重複?
將假設按日期的分區,這樣的目錄結構:
2012.04.03
/trade
2012.04.04
/trade
2012.04.05
/trade
/ticker
/price
/size
要清除的內容爲一個日期只是刪除該文件夾,然後\l
。
爲了避免重複檢查,如果存在先那天的數據:
select count i from trade where date=2012.04.06
如果一個日期的數據可能來自不同的文件,這使得它棘手。你可能想要添加一個sourceFile列和或作爲一個單獨的表來跟蹤哪些文件被加載。
你是什麼意思的「然後\」? –
他意味着您必須重新映射表以查看更改。參見http://code.kx.com/wiki/JB:KdbplusForMortals/partitioned_tables#1.3.5_Modifying_Partitioned_Tables – user1895961
@RobertKubrick它是'\ l',順便說一句,不是'\ |' – mollmerx
您還可以將刪除過程合併到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
如果你的腳本使用'.Q.dpft []'寫信給每個分區,那麼你就不需要擔心重複:該功能將覆蓋該日期的表中現有的數據。 – mollmerx