Метод checkAndPut, по-видимому, всегда помещает значение независимо от значения сравнения GREATER. Приведенный ниже код иллюстрирует эту проблему, так как значение «a» лексикографически меньше, чем «bbbbbb», можно было бы ожидать, что CheckAndPut не поместит в сценарий, однако это так.
Я использую
<groupId>com.google.cloud.bigtable</groupId>
<artifactId>bigtable-hbase-1.x-hadoop</artifactId>
<version>1.3.0</version>
Ниже приведен код:
byte[] key = "key17".getBytes();
byte[] smaller = "a".getBytes();
byte[] larger = "bbbbbb".getBytes();
byte[] COL_FAMILY = "family".getBytes();
byte[] COL_QUAL = "qual".getBytes();
/** if null, we set it here **/
boolean doRun = table.checkAndPut(key, COL_FAMILY, COL_QUAL, null,
new Put(key).addColumn(COL_FAMILY, COL_QUAL, smaller));
System.out.println("WRITE OCCURRED: " + doRun);
Result rr = table.get(new Get(key).addFamily(COL_FAMILY));
byte[] res = rr.getValue(COL_FAMILY, COL_QUAL);
System.out.println("BEFORE STORED VAL: " + new String(res));
// should NOT put and return false since "a" is NOT greater than
// "bbbbbb"
doRun = table.checkAndPut(key, COL_FAMILY, COL_QUAL, CompareOp.GREATER, larger,
new Put(key).addColumn(COL_FAMILY, COL_QUAL, larger));
rr = table.get(new Get(key).addFamily(COL_FAMILY));
res = rr.getValue(COL_FAMILY, COL_QUAL);
System.out.println("AFTER STORED VAL: " + new String(res));
System.out.println("WRITE OCCURRED: " + doRun);
выход
WRITE OCCURRED: true
BEFORE STORED VAL: a
AFTER STORED VAL: bbbbbb
WRITE OCCURRED: true