HBase 1.2是否相当于Accumulo的RegExFilter?

时间:2017-05-10 17:57:43

标签: regex hbase accumulo

我有Accumulo 1.6的背景,我已被指示分析API of HBase 1.2。 HBase 1.2是否具有与Accumulo中的RegExFilter等效的内置功能?我没见过一个,所以下面我试图破解一些在功能上等同的东西。

在Accumulo方面......

Accumulo的RegExFilter支持这些字段的任意组合中的正则表达式:

  • 专栏系列
  • 列限定符

RegExFilter可以选择支持" OR"跨表达式的行为 - 如果任何表达式匹配则返回该条目。

RegExFilter有一个选项可以支持子字符串上的匹配。

在HBase 1.2方面,我的理解是......

  • RegexStringComparator可用于通过将其与CompareFilter实现一起使用来过滤字段。
  • RowFilter可以根据键的行键部分进行过滤
  • QualifierFilter可以根据键的列限定符部分进行过滤
  • ValueFilter可以根据值
  • 进行过滤
  • 可以将多个过滤器添加到FilterList,它本身就是Filter的子类,并且可以在FilterList的过滤器中定义AND / OR行为。

在HBase中,为了模仿Accumulo的RegExFilter,我可以做类似以下的事情:

List<Filter> filters = new ArrayList<Filter>();

// Regex for row
if (rowRegEx != null) {
   filters.add(new RowFilter(CompareOp.EQUAL,
         new RegexStringComparator(rowRegEx));
}

// Regex for column family
if (colFamRegEx != null) {
   filters.add(new FamilyFilter(CompareOp.EQUAL,
         new RegexStringComparator(colFamRegEx));
}

// Regex for column qualifier
if (colQualRegEx != null) {
   filters.add(new QualifierFilter(CompareOp.EQUAL,
         new RegexStringComparator(colQualRegEx));
}

// Regex for value
if (valRegEx != null) {
   filters.add(new ValueFilter(CompareOp.EQUAL,
         new RegexStringComparator(valRegEx));
}

// For "or" behavior, use FilterList.Operator.MUST_PASS_ONE
FilterList filterList = new FilterList(
      FilterList.Operator.MUST_PASS_ALL, filters);
Scan scan = new Scan();
scan.setFilter(filterList);

// TODO How to mimic "match on substring" behavior of RegExFilter?

问题1 我的(未经测试的)代码段是否与Accumulo 1.6的RegExFilter等同于合法的HBase 1.2?如果没有,那么可以改进什么?

问题2 我认为Accumulo的RegExFilter&#34;匹配子串&#34;可以使用稍微不同定义的正则表达式在HBase 1.2中实现选项。有没有那么笨重的方法来做到这一点,所以理想情况下我可以在Accumulo和HBase中使用相同的正则表达式?

0 个答案:

没有答案