hbase中的三重复合密钥

w8f9ii69  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(329)

我有一个用例,我想要3级复合键。例如rollnumber:class: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的各个部分?

7uzetpgm

7uzetpgm1#

试试这个:

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

kx1ctssn2#

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

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\u rollnumbermyclass开始的所有行。我不确定您是否使用:在您的rowkey中。但我认为如果rollnumber和class都表示为整数,您应该这样做。

相关问题