我有一个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'开头的记录。
答案 0 :(得分:2)
使用SingleColumnValueFilter
此过滤器将列族,限定符,比较运算符和比较器作为参数。
- 如果找不到指定的列,则该行的所有列 将被释放。
- 如果找到该列并与比较器进行比较 返回
true
,将发出该行的所有列。- 如果找到该列并与比较器进行比较 返回
醇>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 :(得分:0)
您可以做的最好的事情是您可以在Hive中创建一个外部表,使用相同的模式映射到HBase表,并且您可以在HBase表的顶部运行配置单元查询。
您可以使用在HBase表数据顶部运行的Hive查询中的条件。
您可以refer to this blog将hive与HBase集成并在HBase表的顶部运行Hive查询。