我在kdb中有一个表'T'表,行数超过60亿。当我尝试执行这样的查询时
select from T where i < 10
它抛出wsfull expection
。有没有办法在具有大量数据的表中执行这样的查询。
答案 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