hbase
表格有CityName
和ID
作为复合键。我按如下方式制作了rowkeys
:
Cityname
和ID
的MD5哈希ID
附加到Cityname
。 Row key : MD5[CityName]MD5[ID]
现在,我希望获得CityName = "London"
的所有行。
我尝试进行部分扫描,但我不明白如何制作停止键。或者是否有其他方法可以获取特定城市的所有行。
答案 0 :(得分:1)
这是一个可能对您有用的简单解决方案:
Scan myScan = new Scan(Bytes.add("yourHashedCityName".getBytes() + Bytes.toBytes(0), Bytes.add("yourHashedCityName".getBytes() + Bytes.toBytes(Integer.MAX_VALUE));
请注意,stopRow是独占的,因此,将排除ID为Integer.MAX_VALUE的行。
如果您的ID为8字节长,则将0替换为0L,将Integer.MAX_VALUE替换为Long.MAX_VALUE:)
无论如何,我通常在包含哈希的行键中使用1个字节作为分隔符(null),因为很明显我将使用它们进行扫描,有点像:
byte[] myRowkey = Bytes.add("first".getBytes() + "\0".getBytes() + "second".getBytes());
这样,我可以很容易地做到:
Scan myScan = new Scan(Bytes.add("first".getBytes() + "\0".getBytes()), "first".getBytes() + "\1".getBytes());
扫描程序将从first\0
开始直到first\1
(由于我只使用\ 0作为分隔符而不会存在的行。)
答案 1 :(得分:1)
键以词法顺序存储在HBase中。因此,如果“伦敦”的MD5哈希是'1234',那么你可以获得所有以伦敦开头的键,但是从'1234'扫描到'1235' - 即开始键只是你的MD5哈希和结束key只是将键的第一部分的最后一个字节递增1