HBase的rowkey排序和scan輸出順序


本文目的:搞清楚HBase里面行與行之間的排序排序規則,如何正序和反序輸出掃描結果。

明確:

HBase里面同一列的元素按照rowkey進行排序,排序規則是rowkey的ASCII碼排序,小的在前大的在后

舉例說明:rowkey的時間設計是Long.MAX_VALUE減去真實的timestamp(單位:秒)(System.currentTimeMillis()/1000得到),由此來看rowkey的排序。

其中箭頭表示HBase掃描內容時的掃描方向。

假設startRowKey由時間戳產生startTime產生,endRowKey由endTime產生,其中endTime > startTime,例如endTime表示"2016-01-02 00:00:00",startTime表示"2016-01-01 00:00:00",則對應關系為

此時掃描由於startRowkey > endRowKey不會有掃描結果!證明箭頭方向表示掃描方向。但是可以通過設置反向掃描數據,這時相當於掃描方向反轉,而不是endRowKey和startRowKey位置互換

1 scanner.setReversed(true);

通過依次輸出結果可以看出時間戳遞增,同樣證明箭頭方向表示掃描方向,且掃描方向被反轉。

//{"timestamp":1478620651}
//{"timestamp":1478620661}
//{"timestamp":1478620671}
//{"timestamp":1478620681}
//{"timestamp":1478620692}
//{"timestamp":1478620703}

 如果想掃描出結果還有一種辦法,startRowKey由時間戳產生endTime產生,endRowKey由startTime產生。此時相當於endRowKey和startRowKey位置互換

 

此時輸出結果與之前相反,時間順序由大到小。

//{"timestamp":1478620703}
//{"timestamp":1478620692}
//{"timestamp":1478620681}
//{"timestamp":1478620671}
//{"timestamp":1478620661}
//{"timestamp":1478620651}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM