查询rowkey后缀部分的Hbase表
我有一个hbase表,它的键是复合键part1\u part2\u part3查询rowkey后缀部分的Hbase表,hbase,Hbase,我有一个hbase表,它的键是复合键part1\u part2\u part3 现在我想在rowkey的第3部分查询关键字的结果。那么,除了扫描第3部分中的所有行并检查关键字是否存在之外,还有什么最佳的查询方法吗?您是否尝试过使用HBase筛选器?如果没有,您可以将行过滤器与子字符串比较器一起使用来实现这一点。以下是RowFilter的使用方式: public class RowFilterDemo { public static void main(String[] args) th
现在我想在rowkey的第3部分查询关键字的结果。那么,除了扫描第3部分中的所有行并检查关键字是否存在之外,还有什么最佳的查询方法吗?您是否尝试过使用HBase筛选器?如果没有,您可以将行过滤器与子字符串比较器一起使用来实现这一点。以下是RowFilter的使用方式:
public class RowFilterDemo {
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, "demo_table");
Scan s = new Scan();
Filter f = new RowFilter(CompareOp.EQUAL, new SubstringComparator("_part3"));
s.setFilter(f);
ResultScanner rs = table.getScanner(s);
for(Result r : rs){
for (KeyValue kv : r.raw()){
System.out.println("RowKey : " + Bytes.toString(r.getRow()));
System.out.println("Qualifier : " + Bytes.toString(kv.getQualifier()));
System.out.println("Value : " + Bytes.toString(kv.getValue()));
}
}
rs.close();
table.close();
}
}
这将返回其行键包含第3部分的所有行
另一种方法是通过反转行键设计并使用PrefixFilter获取数据来稍微调整行键设计。给定一个在实例化筛选器实例时指定的前缀,与此前缀匹配的所有行都将返回给客户端
在这种情况下,行键将是第3部分\u第2部分\u第1部分。获取数据的代码为:
Filter filter = new PrefixFilter(Bytes.toBytes("part3_"));
Scan scan = new Scan();
scan.setFilter(filter);
ResultScanner scanner = table.getScanner(scan); for (Result result : scanner) {
for (KeyValue kv : result.raw()) {
System.out.println("KV: " + kv + ", Value: " + Bytes.toString(kv.getValue())); }
}
scanner.close();
这种方法还使您能够使用Scan.startRow()和Scan.stopRow()方法执行范围扫描。这将比使用过滤器更有效
更高级的方法是使用HBaseFuzzyRowFilter。但要使用它,您的行键必须具有相同的长度
-除了扫描所有行之外,还有什么最佳的查询方式吗
并检查第3部分中是否存在关键字?
Change your design if possible and use range queries.
嗯