【问题标题】:HBase multi columns filteringHBase 多列过滤
【发布时间】:2013-11-24 08:54:24
【问题描述】:

我在 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 过滤器基于cell,它将仅包含/跳过一列。我想知道 Hbase 中是否有一种过滤器可以像我想要的那样进行过滤?我应该如何实施它?

谢谢。

【问题讨论】:

    标签: hbase


    【解决方案1】:

    您可以使用 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 f1 = new SingleColumnValueFilter(Bytes.toBytes("cf"), Bytes.toBytes("c3"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("v3"));
    SingleColumnValueFilter f2 = new SingleColumnValueFilter(Bytes.toBytes("cf"), Bytes.toBytes("c2"), CompareFilter.CompareOp.EQUAL, Bytes.toBytes("v2"));
    
    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE); //could be FilterList.Operator.MUST_PASS_ALL instead
    filterList.addFilter(f1);
    filterList.addFilter(f2);
    
    Scan scan = new Scan();
    scan.setFilter(filterList);
    

    【讨论】:

      【解决方案2】:

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

      scan '<table_name>',{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']}
      

      【讨论】:

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