我有一个销售点系统,将我的数据导出到.csv然后导入KDB . 目前,我所做的是将所有数据从POS导出到csv,然后创建一个表 . 我有大约10个月的销售数据,我的csv文件大约是11mb . 随着时间的推移,我想csv文件真的很大,我想知道这是否效率低下 .
在我以前的工作中,我们要做的是为每一天的数据创建一个表,然后会有一个_hist表,它将所有日常文件组合在一起 . 因此,如果我想查看当天的数据,我会查看invoicedata表,如果我想查看所有时间,我会查看invoidata_hist表并设置查询以查看日期(dateA; dateB) . 我想知道我是否应该以这种方式设置,而不是我现在这样做 .
我最好有一个包含所有数据的非常大的csv文件,还是应该为每一天创建一个csv文件?如果第二种方式更好,任何人都可以让我知道设置这一切的最佳方法吗?
谢谢!
1 回答
如果您的记录总数不会超过几百万,那么分区可能是一种过度杀伤力 .
如果我的 daily 表数大约为100万或更多,我会考虑对数据进行分区 .
您还需要考虑如何访问数据,例如检查
date
分区表中的频繁客户的last-n
记录可能会影响您的查询性能,因为您必须迭代地回顾 . 在这种情况下,展开的或每年分区的表可能是合适的 .虽然有多种方法可以将数据存储在磁盘上,但请查看this link .
``:/db/t set ([] ti:09:30:00 09:31:00; p:101.5 33.5)`
``:/db/t/ set ([] ti:09:30:00 09:31:00; p:101.5 33.5) // trailing "/" in the file handle`
.Q.dpft[directory;partition;
p#field;tablename]`.Q.dpft[directory;partition;
p#field;tablename]`由于您在问题中要求提供日期分区表,实际上有不同的方法可以partition your data:
每天
每月
每年
长(可在任何
long
列上自定义)You might want to store the data in a monthly partition based on the table count.
要将数据保存到分区,可以使用.Q.dpft函数
来自code.kx的示例: