我有一个用例,我想要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的各个部分?
答案 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都表示为整数。