Я использую 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: Error в поле row_ranges: ошибка в элементе №0: start_key должен быть меньше end_key
Как я понимаю из этого обсуждения -stopkey">при обратном сканировании в HBase, где startKey, а где stopKey?, обратное сканирование не работает в версиях ниже 0.98, но я вижу свою серверную версию как 1.2.1 в облачной консоли Google:
hbase(main):023:0> версия 1.2.1, r8d8a7107dc4ccbf36a92f64675dc60392f85c015, среда, 30 марта 11:29:35 CDT 2016
Кроме того, мой JAR на стороне клиента — bigtable-hbase-1.2-0.9.4.jar.
В качестве теста мои ключи строк отформатированы следующим образом:
Джон*1*XXX
Джон*2*XXX
Джон*3*XXX
Есть ли лучший способ чтобы сделать это, пожалуйста?