如何根据Hbase表中的条件检索记录?

时间:2017-03-31 13:07:19

标签: hbase

我有一个Hbase表:employeedetails with column families:cols-personaldetails:firstname,lastname,professionaldetails:cols-company,empid 它包含以下数据。

 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 个答案:

答案 0 :(得分:2)

使用SingleColumnValueFilter

  

此过滤器将列族,限定符,比较运算符和比较器作为参数。

     
      
  1. 如果找不到指定的列,则该行的所有列   将被释放。
  2.   
  3. 如果找到该列并与比较器进行比较   返回true,将发出该行的所有列。
  4.   
  5. 如果找到该列并与比较器进行比较   返回false,不会发出该行。
  6.   

<强>语法:

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

<强>尝试:

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

如果filterIfColumnMissing标志设置为true,则如果在行中找不到要检查的指定列,则不会发出该行的列。

如果这会检索预期结果,请告诉我。

答案 1 :(得分:0)

您可以做的最好的事情是您可以在Hive中创建一个外部表,使用相同的模式映射到HBase表,并且您可以在HBase表的顶部运行配置单元查询。

您可以使用在HBase表数据顶部运行的Hive查询中的条件。

您可以refer to this blog将hive与HBase集成并在HBase表的顶部运行Hive查询。