Hbase中的三重复合键

时间:2015-05-25 12:08:53

标签: hadoop hbase

我有一个用例,我想要3级复合键。 例如。 Rollnumber:类:friendsRollNumber

我想查询"获取所有朋友的特定滚动号码和课程"

我无法通过网络找到足够的示例来使用复合键和范围扫描。

目前,我正在做以下事情。

byte[]rowkey = Bytes.add(Bytes.tobytes("myrollnumber"),Bytes.tobytes("myClass"),Bytes.tobytes("myFriendsRollNumber"))

这是我形成行键的方式。 它会根据myRollNumber和myClass选择区域服务器吗?如果不是我该怎么办?

此外,对于范围扫描,使用它的正确方法是什么。我是按照以下方式做的。我仍然在编写代码,所以没有测试过。

Scan s = new Scan();
Filter f  = New PrefixFilter(Bytes.tobytes("myrollnumber"),Bytes.tobytes("class"))
s.setFilter(f)

根据我的要求扫描上述方法是否正确?

另外,如何从扫描仪获取rowKey的各个部分?

2 个答案:

答案 0 :(得分:0)

试试这个:

byte[] prefix=Bytes.toBytes("rollnumber" + "class");
Scan scan = new Scan(prefix));
PrefixFilter prefixFilter = new PrefixFilter(prefix);
scan.addFilter(prefixFilter);
ResultScanner resultScanner = table.getScanner(scan);

答案 1 :(得分:0)

根据您的要求,您可以使用“扫描”的“开始停止行”功能。您不需要过滤器。

byte[]startRow= Bytes.add(Bytes.tobytes("search_rollnumber"),Bytes.tobytes("myClass"));
byte[]stopRow= Bytes.add(Bytes.tobytes("search_rollnumber"),Bytes.tobytes("myClass"));
stopRow[stopRow.length - 1]++;
Scan s = new Scan(startRow, stopRow);

使用此扫描,您将获得以search_rollnumberMyClass开头的所有行。 我不确定你使用:在你的rowkey中。但我认为你应该将rollnumber和class都表示为整数。