-1

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.

4

2 回答 2

0

在这方面寻求帮助并不难。谷歌搜索如何使用 hbase 过滤器肯定会给你很多很好的链接。例如,请参见thisthis

就使用过滤器的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 回答