2016-09-30 17 views
1

Hbaseが内部的にファイルから重複レコードを処理する方法を理解したいと思います。 これを実験するために、テーブルプロパティ、SERDE、列ファミリなどのHBase固有の構成プロパティを使用して、ハイブでEXTERNALテーブルを作成しました。 HBaseで列ファミリのテーブルを作成する必要があります。Hbaseは重複レコードをどのように扱いますか?

重複したレコードを持つソーステーブルからこのHIVEテーブルへの上書きを実行しました。私はこのような意味で重複したレコードによって 、

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

今すぐ挿入の上書きを行った後、私はIDが1の私のHIVEテーブルを照会し、私は私が望んでいたとして出力(1秒)

1  RiteshKumar   Rai 

を得ましたどちらが更新されるかをHBaseがどのように決定するのか?それはちょうどそれがちょうどシーケンシャルな方法でデータを書くことです。最後のレコードは上書きされ、最新のものとみなされますか?またはそれはどのようにですか?

ありがとうございます。

よろしく、 Govind

答えて

2

あなたは正しい軌道に乗っています!

row:column_family:column_qualifier:timestamp:value 

HBasedatamodelが「多次元マップ」と各セルの値として見ることができるタイムスタンプ(デフォルトでinsertion_time)に関連付けられているタイムスタンプがそれぞれ単一の値と関連付けられ、行全体ではありません(これはいくつかの素晴らしい機能を可能にします)!

特に指定しない限り、デフォルトで最新のバージョンが取得されます。デフォルトでは3 versionsが格納されます。 Hbaseは 'merge read'を行い、各行の最新のセル値を返します。

(実際に投稿する前にテストされていません)あなたの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

のベストプラクティスを見てみることを忘れないでくださいこの場合の価値? –

関連する問題