I am new to HBase. Please tell me how to use Scan and Filter for querying data from HBase (A sample piece of code). Have searched a lot. But got confused. Pls help. Thanks.
问问题
1710 次
2 回答
0
在这方面寻求帮助并不难。谷歌搜索如何使用 hbase 过滤器肯定会给你很多很好的链接。例如,请参见this和this。
就使用过滤器的AFA而言,首先需要创建一个Scan对象,然后创建一个Filter实例,将过滤器添加到此扫描对象中,并使用HTable实例调用getScanner()并将扫描对象作为参数传递给它。例如,我有一个表,其中包含一些与我的用户相关的数据,并且 rowkey 是 userID。现在,我想获取有关 userID 以abc开头的所有用户的所有信息。在这种情况下,我可以通过传递abc作为参数来使用PrefixFilter 。这将返回所有行键以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();
}
Result API 提供了许多方法,您可以根据需要使用它们,例如getRow()、getColumn()等。您可以查看API以获取更多信息。我还建议您获取Lars George的HBase The Definitive Guide的副本。这是一本很棒的书,包含了学习 HBase 所需的一切。对于过滤器,请参阅第 4 章。
高温高压
于 2013-09-09T14:18:09.050 回答
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();
于 2017-05-02T10:23:16.287 回答