KDB-历史表格-什么';这是“什么?”;对",;怎么做?

KDB-历史表格-什么';这是“什么?”;对",;怎么做?,kdb,Kdb,我有一个销售点系统,将我的数据导出到.csv,然后导入KDB。目前我要做的是将所有数据从POS导出到csv,然后创建一个表。我有大约10个月的销售数据,我的csv文件大约为11mb。随着时间的增长,我想象csv文件将非常巨大,我想知道这是否是低效的 在我以前的工作中,我们要做的是为每一天的数据创建一个表,然后创建一个历史表,它将合并所有的日常文件。因此,如果我只想查看当天的数据,我会查看invoicedata表,如果我想查看所有时间,我会查看invoidata_hist表,并将查询设置为查看(d

我有一个销售点系统,将我的数据导出到.csv,然后导入KDB。目前我要做的是将所有数据从POS导出到csv,然后创建一个表。我有大约10个月的销售数据,我的csv文件大约为11mb。随着时间的增长,我想象csv文件将非常巨大,我想知道这是否是低效的

在我以前的工作中,我们要做的是为每一天的数据创建一个表,然后创建一个历史表,它将合并所有的日常文件。因此,如果我只想查看当天的数据,我会查看invoicedata表,如果我想查看所有时间,我会查看invoidata_hist表,并将查询设置为查看(dateA;dateB)内的日期。我想知道我是否应该用这种方式而不是现在的方式来安排事情

我最好有一个包含所有数据的超大csv文件,还是应该为每一天创建一个csv文件?如果第二种方法更好的话,有谁能告诉我最好的方法是什么


谢谢

如果您的记录总数不会超过几百万条,那么分区可能是一种过度使用

如果我的每日表计数约为100万或更多,我会考虑对数据进行分区

您还需要考虑如何访问数据,例如检查<代码> LATST-N/COD>在“代码>日期>代码>中频繁的客户记录。分区表可能会影响您的查询性能,因为您必须反复查找。在这种情况下,八字或年度分区表可能是合适的

说到有多种方法可以将数据存储在磁盘上,请查看

  • 二进制序列化(将表存储为二进制块)

    `:/db/t集([]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)//文件句柄中的尾部“/”

  • (水平分区八字表格)

    .Q.dpft[目录;分区;`p#字段;表名]

  • (提前分区以获得更好的查询/地图缩减结果)

    .Q.dpft[目录;分区;`p#字段;表名]

  • -将数据保存为二进制/xml/csv/txt/xml格式

由于您在问题中要求提供一个日期分区表,实际上有不同的方法可以:

  • 每日
  • 月刊
  • 每年
  • 长(可在任何
    long
    列上自定义)
您可能希望根据表计数将数据存储在每月分区中。

要将数据保存到分区,可以使用函数

code.kx中的示例:

q)trade:([]sym:10?`a`b`c;time:.z.T+10*til 10;price:50f+10?50f;size:100*1+10?10)
q).Q.dpft[`:db;2007.07.23;`sym;`trade]
`trade
q)trade:([]sym:10?`a`b`c;time:.z.T+10*til 10;price:50f+10?50f;size:100*1+10?10)
q).Q.dpft[`:db;2007.07.23;`sym;`trade]
`trade