hbase
表將CityName
和ID
作爲組合鍵。我提出rowkeys
如下:爲hbase中散列的部分密鑰製作停止鍵
- 的
Cityname
MD5散列和ID
分別 - 追加散列
ID
到Cityname
。
Row key : MD5[CityName]MD5[ID]
現在,我想獲得與CityName = "London"
所有行。
我試圖做部分掃描,但我不知道如何使停止鍵。或者還有其他方式可以獲得具有特定城市的所有行。
hbase
表將CityName
和ID
作爲組合鍵。我提出rowkeys
如下:爲hbase中散列的部分密鑰製作停止鍵
Cityname
MD5散列和ID
分別ID
到Cityname
。Row key : MD5[CityName]MD5[ID]
現在,我想獲得與CityName = "London"
所有行。
我試圖做部分掃描,但我不知道如何使停止鍵。或者還有其他方式可以獲得具有特定城市的所有行。
這裏有一個簡單的解決方案,可能會工作你:
Scan myScan = new Scan(Bytes.add("yourHashedCityName".getBytes() + Bytes.toBytes(0), Bytes.add("yourHashedCityName".getBytes() + Bytes.toBytes(Integer.MAX_VALUE));
請注意stopRow是排他性的,因此,爲Integer.MAX_VALUE的ID的行將被排除在外。
如果你的ID是8字節長的0L和Integer.MAX_VALUE的爲Long.MAX_VALUE取代0 :)
反正我通常在含我行鍵使用1個字節作爲分隔符(空)哈希值時,它的明顯,我打算使用它們進行掃描,有點像:
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作爲分隔符,所以不會存在的行)。
鍵以字典順序存儲在HBase中。因此,如果「倫敦」的MD5哈希爲'1234',那麼您可以獲得以倫敦開頭的所有密鑰,但是從'1234'到'1235'掃描 - 即開始密鑰只是您的MD5哈希值,結束鍵只是將密鑰第一部分的最後一個字節增加1