扫描HBase中的复合键

时间:2014-04-06 09:24:07

标签: java hadoop hbase nosql

我是HBase的新手,必须使用复合键作为行键。请告诉我

如何使用该复合键扫描或(获取)某些记录?(在第1和第2部分以及RK的其他部分)。(例如Rowkey:&lt; 123-tom-1991&gt;扫描tom)< / p>

编辑:行键是字节数组(这在问题中同样重要)

2 个答案:

答案 0 :(得分:1)

请检查以下内容:Skip Scan

这已在凤凰城实施。您可以查看它们的实施情况。

答案 1 :(得分:1)

    Configuration conf = HBaseConfiguration.create();
    HTable table = new HTable(conf, "t1");
    Scan s = new Scan ();
    RegexStringComparator keyRegEx = new RegexStringComparator(".*tom.*");
    RowFilter rowFilter = new RowFilter(CompareOp.EQUAL, new  RegexStringComparator(".*tom.*"));
    s.setFilter(rowFilter);
    ResultScanner scanner = table.getScanner(s);
    Iterator<Result> it = scanner.iterator();
    while(it.hasNext()){
        // ... your code ...

}

根据您的要求改变正则表达式。 .*?-tom-.*在这里会很好。

根据编辑,上述答案不会很好。如果将行键作为字节数组非常重要,请使用FuzzyRowFilter

引用javadocs

**根据模糊行键过滤数据。在扫描期间执行快进。它需要成对(行键,模糊信息)来匹配行键。其中模糊信息是一个字节数组,其值为0或1:

0 - 表示提供的行密钥中的该字节是固定的,即在同一位置的行键的字节必须匹配

1 - 表示提供的行键中的该字节不固定,即此位置的行键字节可能与提供的行键中的字节不同

示例:假设行键格式为userId_actionId_year_month。 userId的长度是固定的,为4,actionId的长度为2,年和月分别为4和2个字节。让我们假设我们需要在任何一年的1月份获取执行某些操作(编码为&#34; 99&#34;)的所有用户。然后该对(行键,模糊信息)将如下:行键=&#34; ???? 99 ???? _ 01&#34; (可以使用任何值而不是&#34;?&#34;)模糊信息=&#34; \ x01 \ x01 \ x01 \ x01 \ x00 \ x00 \ x00 \ x00 \ x01 \ x01 \ x01 \ x01 \ X00 \ X00 \ X00&#34;即模糊信息告诉匹配的掩码是&#34; ???? 99 ???? _ 01&#34;,在哪里?可以是任何价值。**