【问题标题】:simple query in HBaseHBase 中的简单查询
【发布时间】:2015-05-02 17:59:30
【问题描述】:

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

考虑这个简单的 MySQL 查询:“SELECT username FROM members WHERE email = myname@domain.com

在 HBase 中也是如此,我有表名:members。我有两列:用户名和电子邮件

现在,我想提取电子邮件等于的用户名 myname@domain.com。

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

提前致谢

【问题讨论】:

    标签: hbase nosql


    【解决方案1】:

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

    • 通过它的行键访问它:GET(快速)
    • 通过扫描部分或全部行:SCAN(慢)

    每个表格单元格通过以下方式标识:

    • 行键+列族+列+时间戳+值

    行键可以是任何可以序列化为字节[](整数、字符串...)的东西

    在RDBMS中,你可能会有一个email字段的索引,这样引擎可以很容易地找到行的位置,而不需要扫描整个表,从而使检索速度更快。

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


    现在,关于您的问题,我认为您正在寻找 ValueFilter,就像 SingleColumnValueFilter 但您不需要提供该列,它会匹配任何具有该值的列。无论如何,我不认为这是一个非常常用的过滤器,在与 HBase 合作几年后,我一直使用 SingleColumnValueFilter 代替......

    您可以在这里找到一个很好的过滤器列表: http://www.cloudera.com/content/cloudera/en/documentation/core/latest/topics/admin_hbase_filtering.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多