2017-03-31 57 views
1

我有一個Hbase表:員工詳細列家族:cols-personaldetails:名字,姓氏,職業細節:cols-company,empid 並且它有以下數據。如何根據Hbase表中的條件檢索記錄?

1 column=personaldetails:firstname, timestamp=1490959927100, value=Steven 
1 column=personaldetails:lastname, timestamp=1490959947478, value=Gerrard 
1 column=professionaldetails:company, timestamp=1490959968846, value=ABC 
1 column=professionaldetails:empid, timestamp=1490959978542, value=02429O 
2 column=personaldetails:firstname, timestamp=1490960007427, value=Sidhartha 
2 column=personaldetails:lastname, timestamp=1490960054615, value=Bobby 
2 column=professionaldetails:company, timestamp=1490960074243, value=DEF 
2 column=professionaldetails:empid, timestamp=1490960103882, value=02429N 
3 column=personaldetails:company, timestamp=1490960175772, value=WES 
3 column=personaldetails:empid, timestamp=1490960187863, value=987789 
3 column=personaldetails:firstname, timestamp=1490960128896, value=Sunny 
3 column=personaldetails:lastname, timestamp=1490960142031, value=Smith 

有沒有辦法編寫一個命令來檢索名字以'S'開頭的記錄。

回答

2

使用SingleColumnValueFilter

該過濾器採用列家庭,一個限定詞,一個比較操作符和比較作爲參數。

  1. 如果沒有找到指定的列,該行 的所有列將被髮出。
  2. 如果找到該列並且與比較器 的比較返回true,則將發射該行的所有列。
  3. 如果找到該列並且與比較器 的比較返回false,則該行將不會被髮射。

語法:

SingleColumnValueFilter (‘<family>’, ‘<qualifier>’, <compare operator>, ‘<comparator>’, <filterIfColumnMissing_boolean>, <latest_version_boolean>) 

嘗試:

scan 'employeedetails' ,{ FILTER => "SingleColumnValueFilter('personaldetails','firstname',=, 'binaryprefix:S', true, false)" } 

如果filterIfColumnMissing標誌設置爲true,該行的列將不若發射在行中未找到指定的列進行檢查。

讓我知道這是否檢索預期的結果。

+1

Spot on ..它正在工作。 – Sidhartha

0

您可以做的最好的事情是您可以在Hive中使用與HBase表相同的模式映射創建外部表,並且可以在HBase表頂部運行hive查詢。

您可以在HBase表數據頂部運行的Hive查詢中使用條件。

您可以refer to this blog將hive與HBase集成,並在HBase表頂部運行Hive查詢。

+1

我將數據從Hive複製到Hbase。我只想了解是否有任何選項,例如在Hbase中使用過濾器。 @franklinsijo給出的答案正在起作用。 – Sidhartha