HBase中的简单查询

HBase中的简单查询,hbase,nosql,Hbase,Nosql,我是HBase的新手。我知道HBase并不等同于RDBMS。但是,我喜欢在HBase中运行简单查询,这在RDBMS中非常简单。我尝试使用带过滤器的扫描,但我不知道如何使用值获取列 考虑这个简单的MySQL查询:“从电子邮件=myname@domain.com” 在HBase中也一样,我有表名:members。我有两栏:用户名和电子邮件 现在,我想提取电子邮件等于 myname@domain.com. 我发现有很多示例可以在指定列族和限定符时提取值。但我的情况不同,当我在RDBMS中思考时,它非常

我是HBase的新手。我知道HBase并不等同于RDBMS。但是,我喜欢在HBase中运行简单查询,这在RDBMS中非常简单。我尝试使用带过滤器的扫描,但我不知道如何使用值获取列

考虑这个简单的MySQL查询:“
从电子邮件=myname@domain.com

在HBase中也一样,我有表名:members。我有两栏:用户名和电子邮件

现在,我想提取电子邮件等于 myname@domain.com.

我发现有很多示例可以在指定列族和限定符时提取值。但我的情况不同,当我在RDBMS中思考时,它非常简单,但我不知道如何在HBase中思考。(我知道有一些SQL包装器可以通过HBase使用SQL,但我不想使用它)


提前感谢

您有两种检索数据的方法:

  • 通过其行键访问:GET(快速)
  • 通过扫描部分或所有行:扫描(慢速)
每个表格单元格由以下内容标识:

  • 行键+列族+列+时间戳+值
行键可以是任何可以序列化为字节[](整数、字符串…)的内容

在RDBMS中,您可能会有一个电子邮件字段的索引,这样,引擎就可以轻松找到行的位置,而无需扫描整个表,从而加快检索速度

在HBase中没有索引,只有行键。一种常见的技术是对数据进行非规范化(使用不同的行键多次写入)或构建手动索引:即,考虑将电子邮件的md5存储为行键,其中一列指向真实数据的行键,这样,您就可以通过电子邮件通过两个GET操作检索数据(1.向电子邮件索引表询问电子邮件的行键,2.向用户表询问该行键)


现在,关于你的问题,我想你正在寻找
ValueFilter
,它就像
SingleColumnValueFilter
一样,但你不需要提供列,它会将任何列与值匹配。无论如何,我认为它不是一个非常常用的过滤器,在与HBase合作几年后,我已经ys使用了
SingleColumnValueFilter

在这里,您可以找到一个很好的过滤器列表: