执行超过十亿行的查询

时间:2017-02-15 13:49:10

标签: kdb

我在kdb中有一个表'T'表,行数超过60亿。当我尝试执行这样的查询时

 select from T where i < 10

它抛出wsfull expection。有没有办法在具有大量数据的表中执行这样的查询。

2 个答案:

答案 0 :(得分:3)

10#T

首先编写的表达式会生成一个位图,其中包含i(rownumber)&lt; 10,与你的一个列一样高。然后它在哪里(只包含直到10)然后从每一行获取它们。您可以使用以下方法保存最后一步:

T[til 10]

10#T更短。

答案 1 :(得分:1)

假设您在此处有分区表,将分区列(date,int等)作为查询的where子句中的第一项通常是有益的 - 否则如前所述,您正在读取60亿个项目列入内存,这将为任何少于所需RAM量的机器产生一个wsfull信号。

请记住,每个分区的行索引从0开始,并且不反映整个表中的位置。您在问题中作为示例提供的查询将返回数据库中表T的每个分区的前十行。

为了在不达到内存限制的情况下执行此操作,您可以尝试运行以下命令(如果您的数据库是按日期分区的):

raze{10#select from T where date=x}each date