HBase:使用限定符和值的过滤器扫描时如何获得完整的行?

Posted

技术标签:

【中文标题】HBase:使用限定符和值的过滤器扫描时如何获得完整的行?【英文标题】:HBase: How to get complete rows when scanning with filters by qualifier & value? 【发布时间】:2014-02-07 20:05:11 【问题描述】:

我们需要扫描 HBase 表,在限定符匹配特定模式的列上搜索具有特定值的行。

我们正在设置这样的过滤器:

new FilterList(MUST_PASS_ALL,
    new FamilyFilter(EQUAL, new BinaryComparator(bytes(someFamily))),
    new QualifierFilter(EQUAL, new RegexStringComparator(qualifierRegex)),
    new ValueFilter(EQUAL, new SubstringComparator(detailValue)))

在 Scan 中执行时,它与我们要查找的列和值完全匹配,但 Scanner 返回的结果仅包含匹配的列/值,我们需要包含所有列的整行。

我们已经尝试了很多与 SkipFilter 的组合(工厂 HBase 中唯一可用的过滤器,它似乎会影响基于另一个过滤器的整行),但找不到正确的答案。

当然,我们可以为我们的案例制作一个自定义过滤器,但我们正在努力避免需要向生产运营团队推送“将 jar 部署到所有区域服务器并重新启动 hbase 集群”之类的指令。

【问题讨论】:

运气好吗?这似乎很明显,但在 HBase 中似乎不可能:一个复合过滤器(必须有这个 OR 必须有那个)同时仍然返回复合过滤器本身未提及的列很像:select * from table where (a 【参考方案1】:

改用SingleColumnValueFilter

https://hbase.apache.org/apidocs/org/apache/hadoop/hbase/filter/SingleColumnValueFilter.html

【讨论】:

我不确定您如何建议我们为此目的使用 SingleColumnValueFilter。请详细说明你的答案?

以上是关于HBase:使用限定符和值的过滤器扫描时如何获得完整的行?的主要内容,如果未能解决你的问题,请参考以下文章

通过 hbase shell 命令显示列族和列限定符

在 HBase 中使用带有起始行、结束行和过滤器的扫描

HBase概念学习Java API之扫描和过滤器

Hbase API

mapreduce、hbase 和扫描

使用java检索hbase中的第n个限定符