我有一张表,其中包含Cassandra中的约500M记录。我需要传递所有这些记录并进行一些处理,然后将处理后的记录插入其他表中。由于内存问题,我需要以块的形式检索这些记录。有没有办法做到这一点?
例如,在第一个块中,我需要获取第一个2M,然后在第二个块中,我需要获取第二个2M,依此类推。

最佳答案

如果只运行常规的execute方法,则返回ResultSet。如文档中所述:

通常对结果集的行的检索进行分页(获取第一页结果,仅在使用完第一页的所有结果后才提取下一页)。可以通过QueryOptions.setFetchSize(int)全局配置页面的大小,也可以使用Statement.setFetchSize(int)的每个语句配置页面的大小。尽管在需要时会自动(透明地)获取新页面,但可以通过fetchMoreResults()强制尽早检索下一页。

因此,您可以运行查询以查询所有数据,并将获取大小设置为块大小。然后遍历ResultSet,直到获得大量记录,处理,插入,然后再次开始遍历。

09-10 13:08
查看更多