3
我們使用HBase存儲從oracle到hdfs的sqooped的數據。這裏我們將行鍵設計爲字節數組值。行密鑰使用複合關鍵幀如(Md5(schema name).getBytes() + Md5(date (format = yyyy-mm-dd)).getBytes() + ByteBuffer.allocate(8).putLong(pkid).array())
。這裏的PKID是一個很長的值。HBase:如果使用行鍵範圍獲取行(如果行鍵存儲爲字節數組值)
如果我想獲取特定模式和特定日期的所有行,我可以使用startrow和endrow或任何其他方式查詢hbase表,以便像這樣查詢?
當我存儲我行鍵字符串如user1_20130123
,...
,user1_20130127
我能夠過濾使用
scan 'TempTable', {
COLUMNS => ['CF:NAME'],
LIMIT => 10,
STARTROW => 'user1_20100101',
ENDROW => 'user1_20100115'
}
在這裏我得到了用戶1行,在這些日期表。當我像上面那樣存儲行鍵時,我該如何查詢?
好,我知道了,所以如果我存儲行鍵[16B_schema_MD5_hash] [年月日] [8B_pkid],那麼我將能夠查詢,我測試相同的行鍵爲「user1_20130101」。糾正我,如果我錯了。 – GHK
當然,你可以這樣做,因爲特定格式的日期排序正確。只要記住,你將得到相同的32字節鍵(yyyymmdd是一個8字節的字符串),精度很低(幾天而不是毫秒)。 –
當我們將行鍵與散列值和字符串組合使用時,long(轉換後的字符串數組,字符串轉換後的long數組)長度值是否會存在性能問題。從HBase表中查詢記錄的手段將會是這個行密鑰設計的性能問題嗎? – GHK