Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更改hbase时间戳排序以获取特定行的第一个版本_Java_Hbase_Nosql - Fatal编程技术网

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

Java 更改hbase时间戳排序以获取特定行的第一个版本,java,hbase,nosql,Java,Hbase,Nosql,根据我的要求,我需要获得Hbase中特定行的第一个版本。假设以下Htable: row_key cf1:c1 timestamp ---------------------------------------- 1 x t1 1 x t2 1 x t3 ...

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

row_key          cf1:c1           timestamp
----------------------------------------
1                  x                 t1
1                  x                 t2
1                  x                 t3
...
假设我想根据时间戳检索第(1)行的第一个版本。 首先,是否有用于此目的的hbase java方法? 第二,如果没有这样的方法,我可以通过获取行(1)的最后版本,将timestamp的排序顺序更改为DESC来检索这样的单元格吗?更改hbase的时间戳顺序有什么关系?

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

可能的替代解决办法:

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

您看过scan.setReverse(真)吗?另一方面,它在旧版本中不可用(我们使用0.94.18),这是我们升级的动机之一。

这对我来说太贵了,因为它应该根据每个get请求进行!你衡量过表现上的差异吗?它可能仍然足够快。有其他可能的方法来实现它,但它们都有自己的缺点。我将更新答案。因此,没有办法将Hbase的默认行为更改为按降序排列时间戳?据我所知-没有。您试图解决的实际问题是什么?如果我理解正确的话,setReverse(true)允许以相反的顺序迭代行键,问题是关于单元格版本的相反顺序。我的建议之一是将时间戳作为行键的一部分。在这种情况下,setReverse可能很有用。KeyValueScanner.java“在指定键的前一行的行的第一个单元格中查找扫描仪”我的理解是,第一个单元格是具有第一个时间戳的单元格。也许你是对的,测试起来很容易。让我们将此任务留给原始海报;)当然,我希望我能测试自己,但我在0.94上,没有反向扫描仪。