hbase時間戳注意事項

2021-09-21 01:33:02 字數 967 閱讀 7297

hbase新增資料時使用的時間戳預設使用的是資料新增時的時間,在儲存實時資料的時候是很方便,此時資料時間戳可以當做資料本身的一種屬性來使用。但是如果處理的是離線資料,資料產生時間和資料儲存時間沒有任何關係,那時間戳這個重要的屬性就被浪費來。

所以,hbase提供了自定義時間戳的方法。即在使用put方法新增資料的時候手動新增時間戳:

public put add(cell kv)  //cell是keyvalue的介面

public keyvalue(final byte row, final byte family,

final byte qualifier, final long timestamp, final byte value)

這裡需要注意的是時間戳不能隨意指定,最好新的時間戳要大於等於舊的的時間戳(這裡說的是最好),原因主要有兩個:

因為hbase並不會保留最新插入的資料,而是保留時間戳最大的資料,也就是說如果新新增的資料時間戳小於之前的資料,在版本數足夠的情況下可能新增成功,如果版本數不足則無法新增成功(如果有建表的時候設定的版本數是3,已經有三個版本,如果新新增的資料時間戳比三個版本都小,那這個資料就不會新增成功)

使用api讀取資料的時候,並不是按時間戳大小來讀取的,是按存入時間讀取的,例如,如果有一行資料,新值的時間戳小於舊值的時間戳,使用scan讀取資料在不指定maxversion的情況下,預設讀取的是最新插入的資料而不是時間戳最小的資料。

總結上面兩點就是:時間戳小於舊時間戳有可能插入不成功,如果插入成功使用api讀取的就是最新插入的資料。

hbase的時間戳單位預設是毫秒,但是由於時間戳支援自定義,所以並不能嚴格說預設單位是毫秒。

&emsp例如筆者做過乙個專案,要存入hbase的一批資料的時間戳是秒級的,存入時並沒有將時間戳轉換為毫秒級就直接存入了,此時時間戳是毫秒級的,但是用卻要當做秒來用。所以在我的專案裡hbase的時間戳就是秒級,在用api讀取資料指定範圍時也要按秒來指定時間範圍。

HBase 中 HRegion 切分注意事項

當乙個表過大,即 hregion 過大的時候,會進行切分,將 hregion 根據 rowkey 一分為二,包括其中的所有 store 以及 hregionserver 中的 hlog,因為被分開的 hregion 部分有可能會交給其他的 hregionserver 維護.乙個 hregion 可以...

編譯時間過長注意事項

1 修改標頭檔案後會導致較多的重編譯工作 2 能放在 cpp中的include檔案,盡量不要放在 h中 3 避免標頭檔案重複包含。下文 對於乙個中型或者以上專案,編譯時間本來就不短,如果在編碼過程中,一些問題不注意,將使編譯時間更長,下面介紹幾點需要注意的地方。關於 c coding standar...

oracle時間分鐘格式注意事項

oracle的解惑一二to date 與24小時制表示法及mm分鐘的顯示 一 在使用oracle的to date函式來做日期轉換時,直覺的採用 yyyy mm dd hh mm ss 的格式作為格式進行轉換,但是在oracle中會引起錯誤 ora 01810 格式 出現兩次 如 select to ...