如何解决hbase GREATER_OR_EQAUL 运算符未按预期工作
我的 hbase 表中有这一行: {rowkey:1_1611646861574/cf:value/1611646776287/Put/vlen=8/seqid=0} 现在我想做一个简单的扫描并找到列值大于“1611388300000”的行。但它不返回任何记录;但是,当我使用 LESS_OR_EQUAL 比 1611647500000 时,它会返回此记录。 奇怪的是我可以从 apache phoenix sql 查询中得到这条记录:select * from my_table where value>=1611388300000.
所以数字明显大于列值,apache phoenix 返回它;为什么 hbase compare Operator 没有?
这是我的代码:
Table table = con.getTable(TableName.valueOf("my_table"));
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("cf"),Bytes.toBytes("value"));
FilterList flist = new FilterList(FilterList.Operator.MUST_PASS_ALL);
flist.addFilter(new PrefixFilter(Bytes.toBytes("1")));
flist.addFilter(new SingleColumnValueFilter(
Bytes.toBytes("cf"),Bytes.toBytes("value"),CompareOperator.GREATER_OR_EQUAL,new BinaryComparator(Bytes.toBytes("1611388300000"))));
scan.setFilter(flist);
ResultScanner scanner = table.getScanner(scan);
for (Result result = scanner.next(); result != null; result = scanner.next())
System.out.println("Found row : " + result);
scanner.close();
解决方法
我不知道为什么,但 LESS_OR_EQUAL 可用于字符串:
<select name="" id="select_one" multiple>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
<button onclick="swap('select_one','select_two','left_to_right')">--></button>
<button onclick="swap('select_one','right_to_left')"><--</button>
<select name="" id="select_two" multiple>
<option value="5">1*5</option>
<option value="6">2*5</option>
<option value="7">3*5</option>
<option value="8">4*5</option>
</select>
<script>
var cloneArr = function(arr){
var result = [];
for(var item=0; item<arr.length;item++){
result[item]=arr[item];
}
return result;
}
function swap(select_one,select_two,direction='left_to_right') {
select_one = document.querySelector('#select_one');
select_two = document.querySelector('#select_two');
if (direction=='left_to_right') {
var oneOptions = select_one.selectedOptions;
var arr = cloneArr(oneOptions);
for(var item=0; item<oneOptions.length;item++){
select_one.remove(oneOptions[item].index);
}
for(var item=0; item<arr.length;item++){
select_two.add(arr[item]);
}
}
if (direction=='right_to_left') {
var twoOptions = select_two.selectedOptions;
var arr = cloneArr(twoOptions);
for(var item=0; item<twoOptions.length;item++){
select_two.remove(twoOptions[item].index);
}
for(var item=0; item<arr.length;item++){
select_one.add(arr[item]);
}
}
}
</script>
但是当我使用引号时 GREATER_OR_EQUAL 不起作用,所以我不得不使用数字(添加 L 以指定 Long)
new SingleColumnValueFilter(
Bytes.toBytes("cf"),Bytes.toBytes("value"),CompareOperator.LESS_OR_EQUAL,new BinaryComparator(Bytes.toBytes("1611647500000")))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。