如何根据行键查询hbase
how to query hbase based on row keys
Hbase 新手:
我现在正在与 Hbase 合作,有些事情我想不通(暂时)。我想知道你是否
可以在这里帮助我。
为了尽可能加快速度,HBase 不支持二级索引或替代查询路径。最常见的方法是将相同的行数据写入不同的行键(在相同的 table 或其他 table 中),这会在写入时产生开销,但 HBase 可以很好地处理和扩展写入给定适当的行键设计。
这个话题在HBase book里面解释的很好,看看吧
您可以对此类操作使用筛选器。
解决了这个问题。有两种方法:
1- 您可以将 RowFilter 与 RegexStringComparator 结合使用。例如,如果您缺少 userId(或者您有部分 userId),请使用 RegEx 像这样定义它:
String s= .... //userId 的正则表达式
Filter f = new RowFilter(CompareOp.EQUAL, new RegexStringComparator(s));
FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL);
filters.addFilter(f);
2- 您可以进行一个小型查找 table,其中包含所有 userId 和 channelID,如果缺少 userId 或具有部分 rowkey,则获取所有 userId 或
channelId 与您的部分相匹配,然后针对每个匹配的行键进行几个较小的查询。
我们将两者结合起来,那是成功的。
祝你好运!
Hbase 新手: 我现在正在与 Hbase 合作,有些事情我想不通(暂时)。我想知道你是否 可以在这里帮助我。
为了尽可能加快速度,HBase 不支持二级索引或替代查询路径。最常见的方法是将相同的行数据写入不同的行键(在相同的 table 或其他 table 中),这会在写入时产生开销,但 HBase 可以很好地处理和扩展写入给定适当的行键设计。
这个话题在HBase book里面解释的很好,看看吧
您可以对此类操作使用筛选器。
解决了这个问题。有两种方法:
1- 您可以将 RowFilter 与 RegexStringComparator 结合使用。例如,如果您缺少 userId(或者您有部分 userId),请使用 RegEx 像这样定义它: String s= .... //userId 的正则表达式 Filter f = new RowFilter(CompareOp.EQUAL, new RegexStringComparator(s)); FilterList filters = new FilterList(FilterList.Operator.MUST_PASS_ALL); filters.addFilter(f);
2- 您可以进行一个小型查找 table,其中包含所有 userId 和 channelID,如果缺少 userId 或具有部分 rowkey,则获取所有 userId 或 channelId 与您的部分相匹配,然后针对每个匹配的行键进行几个较小的查询。
我们将两者结合起来,那是成功的。
祝你好运!