Bigtable Scan.setReversed() 在 1.2.1 版中不起作用?

Bigtable Scan.setReversed() not working in version 1.2.1?

我正在使用 JAVA API 通过部分行键向后和向前扫描 Bigtable。此代码运行良好,但只能转发:

    Scan s = new Scan();
    s.setReversed(true);    
    s.setStartRow(rowKey);          
    s.setStopRow(rowKeyEnd); 
    ResultScanner scanner = tbl.getScanner(s);
    for (Result row : scanner)
    {   
        String rk = new String(row.getRow());
        System.out.println("Row: " + rk);
    }

似乎行 .setReversed(true); 本身没有任何影响,无论我是在设置开始和结束行键之前还是之后设置它。如果我在 .setStartRow().setStopRow() 中切换开始和结束行键,那么我会在迭代代码 (Result row : scanner):
中得到一个异常 原因:com.google.bigtable.repackaged.io.grpc.StatusRuntimeException:INVALID_ARGUMENT:字段 'row_ranges' 错误:元素 #0 错误:start_key 必须小于 end_key

据我从讨论中了解到 when reversing a Scan in HBase, which is the startKey and which is the stopKey?,反向扫描在 0.98 以下的版本中不起作用,但我在 Google 云控制台中看到我的服务器端版本为 1.2.1:

hbase(main):023:0>版本 1.2.1,r8d8a7107dc4ccbf36a92f64675dc60392f85c015,3 月 30 日,星期三 11:29:35 CDT 2016

此外,我的客户端 JAR 是 bigtable-hbase-1.2-0.9。4.jar

我的行键按以下方式格式化,作为测试:
约翰*1*XXX
约翰*2*XXX
约翰*3*XXX

请问有没有更好的方法来完成这个?

不幸的是,Bigtable does not support reverse scanning。 HBase API 大部分与 Cloud Bigtable 一致,但不是全部。您发现了 Bigtable 中缺少的功能之一。