bigtable - BigTable CheckAndPut CompareOp.Greater 总是放置
问题描述
无论 GREATER compareOp 是什么,checkAndPut 方法似乎总是放置值。下面的代码说明了这个问题,因为值“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
解决方案
检查 HBASE 文档后,提供的示例阐明了实际比较的内容
GREATER operator means expected value > existing <=> add the put.
我的解释正好相反,所以没有问题。
推荐阅读
- android - FileObserver 根本不起作用
- html - 相对于父级大小的字体大小
- java - Listview 没有空间来显示字符串
- bdd - 在 spock 测试中无法访问 Geb 内容元素:groovy.lang.MissingPropertyException
- reactjs - react redux typescript:无法将继承的道具从父级传递到类容器
- r - 限制数据表中的页面导航选项
- android - 在公共市场找不到商店 ID 有什么解决办法吗?
- scenekit - ARKit:再现项目点功能
- ios - 从 RTMP 流 ios 播放 aac 音频
- linux - X11/XCB/Xlib:复制根窗口到像素图