【发布时间】:2013-04-18 20:08:07
【问题描述】:
我编写了一个 q 脚本来创建一个分区表并从我之前保存的一个大 kdb 文件中插入行。该脚本仅保存我从命令行传入的特定日期的数据。
如何在脚本开始时清除分区表的内容?或者更一般地说,如果我多次运行脚本,如何确保表格内容不重复?
【问题讨论】:
-
如果您的脚本使用
.Q.dpft[]写入每个分区,那么您无需担心重复:该函数会覆盖该日期表中的所有现有数据。
标签: kdb
我编写了一个 q 脚本来创建一个分区表并从我之前保存的一个大 kdb 文件中插入行。该脚本仅保存我从命令行传入的特定日期的数据。
如何在脚本开始时清除分区表的内容?或者更一般地说,如果我多次运行脚本,如何确保表格内容不重复?
【问题讨论】:
.Q.dpft[] 写入每个分区,那么您无需担心重复:该函数会覆盖该日期表中的所有现有数据。
标签: 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 列和/或作为单独的表来跟踪加载了哪些文件。
【讨论】:
\l,顺便说一句,不是\|
您还可以将删除过程合并到 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
【讨论】: