我是HBase的新手,必须使用复合键作为行键。请告诉我
如何使用该复合键扫描或(获取)某些记录?(在第1和第2部分以及RK的其他部分)。(例如Rowkey:&lt; 123-tom-1991&gt;扫描tom)< / p>
编辑:行键是字节数组(这在问题中同样重要)
答案 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;,在哪里?可以是任何价值。**