我是HBase的新手。请告诉我如何使用扫描和过滤器查询HBase中的数据(一段示例代码)。搜索了很多。但感到困惑。请帮忙。感谢。
答案 0 :(得分:0)
找到帮助并不困难。谷歌搜索如何使用hbase过滤器肯定会给你很多很好的链接。例如,请参阅 this 和 this 。
使用过滤器的AFA,首先需要创建扫描对象,然后创建过滤器实例,将过滤器添加到此扫描对象并使用 HTable 实例调用 getScanner(),并将扫描对象作为参数传递给它。 例如,我有一个表格,其中包含一些与我的用户相关的数据,而rowkey是userID。现在,我想获取有关userID以 abc 开头的所有用户的所有信息。在这种情况下,我可以通过传递 abc 作为参数来使用 PrefixFilter 。这将返回rowkey以 abc 开头的所有行。像这样:
public static void main(String[] args) throws IOException {
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, TABLE_NAME);
String userID = "abc";
//Get the data
Scan s = new Scan();
Filter filter = new PrefixFilter(Bytes.toBytes("abc"));
s.setFilter(filter);
ResultScanner rs = table.getScanner(s);
for(Result r : rs){
System.out.println("VALUE : " + Bytes.toString(r.getValue(Bytes.toBytes("cf"), Bytes.toBytes("c1"))));
}
rs.close();
table.close();
}
结果 API提供了许多可以根据需要使用的方法,例如 getRow(),getColumn()等。您可以查看 API 了解更多信息。我还建议您通过 Lars George 获取 HBase The Definitive Guide 的副本。这是一本很棒的书,里面有你需要的一切,以便了解HBase。对于过滤器,请参阅第4章。
HTH
答案 1 :(得分:0)
以下是扫描和过滤器的示例代码:
Configuration conf = HBaseConfiguration.create();
HTable table = new HTable(conf, "emp");
List<Filter> filters = new ArrayList<Filter>();
Filter famFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes("salary")));
filters.add(famFilter);
Filter colFilter = new QualifierFilter(CompareFilter.CompareOp.EQUAL,
new BinaryComparator(Bytes.toBytes("gross")));
filters.add(colFilter);
Filter valFilter = new
ValueFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL,
new BinaryComparator(Bytes.toBytes("1500")));
filters.add(valFilter);
FilterList fl = new FilterList( FilterList.Operator.MUST_PASS_ALL,filters);
Scan scan = new Scan();
scan.setFilter(fl);
ResultScanner scanner = table.getScanner(scan);
for (Result result : scanner) {
for (KeyValue kv : result.raw()) {
System.out.println("kv:"+kv +", Key: " + Bytes.toString(kv.getRow()) +",Value: " +Bytes.toString(kv.getValue()));
}
}
scanner.close();