如何在Hbase扫描中跳过行

  • 本文关键字:扫描 Hbase hadoop hbase
  • 更新时间 :
  • 英文 :


我正在实现一个简单的分页,比如转到第1页、第2页、第3页等等

在HBase Book中,我读到有一个PageFilter,它有一个构造函数,其中有一个参数指示要返回的行数,但问题是如何直接跳过pageSize*currentPageNumber行进入第5页?HBase书中给出的例子看起来像是序列分页,即您可以直接转到第5页。

有没有一种方法可以跳过HBase中的行?

提前谢谢。

PageFilter不提供任何偏移功能,它的工作原理就像一个限制子句,当您有足够的数据时停止扫描操作。

重要的是,HBase不知道一个表有多少行,你必须扫描整个表才能得到这个计数。除其他外,仅此一项就无法对数据进行分页(因为您不知道总页数或每行的偏移量)。不要认为这是一个缺点,因为当你写大量数据时,这会产生巨大的影响。

话虽如此,对数百万(或数十亿)行进行分页是没有意义的。您应该以一种始终可以提供起始点(rowkey)的方式来设计表,这样您的扫描操作就可以从那里开始读取。你不需要知道整行的键,都是start&停止行可以只是一个前缀(即:如果您的数据是按8字节长的时间戳自然排序的,您可以使用它来快进到以前的小时、天、月…)

如果您不能提供任何起点(即使是部分起点),一个非常简单的解决方案可以对您起作用,那就是批量检索记录(即:1000个项目的批量,足以容纳50个页面,可以在客户端轻松处理)。然后,当您到达批次的最后一页时,只需使用最后一项的rowkey作为下一次扫描操作的开始,该操作应检索另一批1000行,依此类推……唯一的缺点是,直接转到更高的页面会很昂贵,因为您需要先加载以前的批次。

最新更新