HBase多列过滤

HBase多列过滤,hbase,Hbase,我在HBase中有一个具有多个列的表。表的结构如下所示: row1 column=cf:c1, timestamp=xxxxxx, value=v1 row1 column=cf:c2, timestamp=xxxxxx, value=v2 row1 column=cf:c3, timestamp=xxxxxx, value=v3 ... 我想写一个自定义过滤器,它可以过滤特定列中的值。例如,如果列c3中存在值v3,我希望包含整行,否则将其删除。据我所知,HBase筛选器基于单元格,其中只包含

我在HBase中有一个具有多个列的表。表的结构如下所示:

row1 column=cf:c1, timestamp=xxxxxx, value=v1
row1 column=cf:c2, timestamp=xxxxxx, value=v2
row1 column=cf:c3, timestamp=xxxxxx, value=v3
...
我想写一个自定义过滤器,它可以过滤特定列中的值。例如,如果列c3中存在值v3,我希望包含整行,否则将其删除。据我所知,HBase筛选器基于
单元格
,其中只包含/跳过一列。我想知道Hbase中是否有一种类型的过滤器可以按照我的要求进行过滤?我应该如何实施它


谢谢

您可以使用SingleColumnValueFilter解决此问题。 使用您的示例,您可以执行以下操作:

SingleColumnValueFilter filter = new SingleColumnValueFilter(Bytes.toBytes("cf"), Bytes.toBytes("c3"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("v3"));
然后,您可以通过以下方式将过滤器添加到扫描中:

Scan scan = new Scan();
scan.setFilter(filter);
此外,如果你想有多个过滤器,你也可以这样做。只需确保将它们添加到FilterList并将其传递到扫描(使用setFilter方法)


您可以对单个和多个条件使用SingleColumnValueFilter。对于您的情况,如果您需要精确匹配限定符(字段)值,您可以尝试以下答案:

scan '<table_name>',{FILTER=>"SingleColumnValueFilter('cf','c3',=,'binary:v3')",COLUMNS=>['cf']}
scan',{FILTER=>“SingleColumnValueFilter('cf','c3',=,'binary:v3'),COLUMNS=>['cf']}
对于多列条件,以下是语法:

scan '<table_name>',{FILTER=>"SingleColumnValueFilter('<column_family>','<column_qualifier>',<comp_operator>,'binary:<qualifier_value>') AND SingleColumnValueFilter('<column_family>','<column_qualifier>',<comp_operator>,'binary:<qualifier_value>')",COLUMNS=>['column_family']}
扫描“”,{FILTER=>“SingleColumnValueFilter(“”,,'binary:')和SingleColumnValueFilter(“”,,'binary:'),COLUMNS=>['column_family']}
scan '<table_name>',{FILTER=>"SingleColumnValueFilter('<column_family>','<column_qualifier>',<comp_operator>,'binary:<qualifier_value>') AND SingleColumnValueFilter('<column_family>','<column_qualifier>',<comp_operator>,'binary:<qualifier_value>')",COLUMNS=>['column_family']}