2016-09-30 104 views
1

我想了解Hbase如何在內部處理來自文件的重複記錄。 爲了做到這一點,我在配置單元中創建了EXTERNAL表,並使用HBase特定的配置屬性,如表屬性,SERDE,列族。 我必須在列家族中創建HBase表,我也是這樣做的。Hbase如何處理重複記錄?

我已經從具有重複記錄的源表執行插入覆蓋到此HIVE表中。 通過重複記錄我的意思是這樣的,

ID | Name  | Surname 
1 | Ritesh  | Rai 
1 | RiteshKumar | Rai 

現在執行插入覆蓋後,我問我的HIVE表ID爲1,我得到的輸出(第二個)

1  RiteshKumar   Rai 

我想到HBase如何決定哪一個更新?只是它只是按順序寫入數據。最後一條記錄將被覆蓋並視爲最新記錄?或者它是怎麼回事?

在此先感謝。

問候, 戈文德

回答

2

你是在正確的軌道上!

row:column_family:column_qualifier:timestamp:value 

HBasedatamodel可以被看作是一個「多維地圖」和每個單元值與時間戳(默認insertion_time)相關聯的時間戳與每個單個值相關聯,並且而不是整行(這使得幾個很好的功能)!

在閱讀時,默認情況下您將獲得最新版本,除非您另行指定。默認情況下應該存儲3 versions。 Hbase進行「合併讀取」,它將返回每一行的最新單元格值。

請從您的HBase的殼試試這個(未發佈之前真正的考驗):

put ‘table_name’, ‘1’, ‘f:name’, ‘Ritesh’ 
put ‘table_name’, ‘1’, ‘f:surname’, ‘Rai’ 
put ‘table_name’, ‘1’, ‘f:name’, ‘RiteshKumar’ 
put ‘table_name’, ‘1’, ‘f:surname’, ‘Rai’ 
put ‘table_name’, ‘1’, ‘f:other’, ‘Some other stuff’ 

// Data on 'disk' (that might just be the memstore for now) will look like this: 
// 1:f:name:1234567890:‘Ritesh’ 
// 1:f:surname:1234567891:‘Rai’ 
// 1:f:name:1234567892:‘RiteshKumar’ 
// 1:f:surname:1234567893:‘Rai’ 
// 1:f:other:1234567894:‘Some other stuff’ 

// Now try... And you will get ‘RiteshKumar’, ‘Rai’, ‘Some other stuff’ 
get ‘table_name’, ‘1’ 

// To get the previous versions of the data use the following: 
get ‘table_name’, ‘1’, {COLUMN => ‘f’, VERSIONS => 2} 

不要忘了看一看的schema design

+0

的最佳實踐是有可能得到以前在這種情況下的價值? –