更改hbase时间戳排序以获取特定行的第一个版本

时间:2015-05-25 07:50:32

标签: java hbase nosql

根据我的要求,我需要在Hbase中获取特定行的第一个版本。假设以下Htable:

row_key          cf1:c1           timestamp
----------------------------------------
1                  x                 t1
1                  x                 t2
1                  x                 t3
...

假设我想根据时间戳检索第一个版本的第(1)行。 首先,为此目的是否有任何hbase java方法? 第二,如果没有这样的方法,我可以通过获取行(1)的最后版本来将时间戳的排序顺序更改为DESC以检索此类单元吗?对hbase的时间戳排序进行此更改有什么顾虑?

2 个答案:

答案 0 :(得分:4)

您可以使用Result.getColumnCells获取所有列,然后从列表中获取第一列。

可能的替代解决方案:

  • 将第一个值存储在单独的列中。这将需要不同的代码来插入和更新单元格。
  • 手动将时间戳设置为Long.MAX_VALUE - System.currentTimeMillis()。在这种情况下,请确保单元格的最大版本数量足够高,否则最新值将由HBase进行垃圾回收。
  • 将时间戳存储为行键的一部分,并使用“使用PageFilter扫描”获取第一个值。

答案 1 :(得分:1)

你看过scan.setReverse(true)吗?附注,它在旧版本中不可用(我们使用0.94.18),这是我们升级的动机之一。

相关问题