Hbase 使用Filter实现类似关系型数据库中的In查询

Hbase 使用Filter实现类似关系型数据库中的In查询

Hbase中的Filter常用用法

/**
* 获得相等过滤器。相当于SQL的 [字段] = [值]
* @param cf 列族名
* @param col 列名
* @param val 值
* @return 过滤器
*/
public static Filter eqFilter(String cf, String col, byte[] val) {
SingleColumnValueFilter f = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.EQUAL, val);
f.setLatestVersionOnly(true);
f.setFilterIfMissing(true);
return f;
}

/**
 * 获得大于过滤器。相当于SQL的 [字段] > [值]
 * @param cf 列族名
 * @param col 列名
 * @param val 值
 * @return 过滤器
 */
public static Filter gtFilter(String cf, String col, byte[] val) {
    SingleColumnValueFilter f = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.GREATER, val);
    f.setLatestVersionOnly(true);
    f.setFilterIfMissing(true);
    return f;
}

/**
 * 获得大于等于过滤器。相当于SQL的 [字段] >= [值]
 * @param cf 列族名
 * @param col 列名
 * @param val 值
 * @return 过滤器
 */
public static Filter gteqFilter(String cf, String col, byte[] val) {
    SingleColumnValueFilter f = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.GREATER_OR_EQUAL, val);
    f.setLatestVersionOnly(true);
    f.setFilterIfMissing(true);
    return f;
}

/**
 * 获得小于过滤器。相当于SQL的 [字段] < [值]
 * @param cf 列族名
 * @param col 列名
 * @param val 值
 * @return 过滤器
 */
public static Filter ltFilter(String cf, String col, byte[] val) {
    SingleColumnValueFilter f = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.LESS, val);
    f.setLatestVersionOnly(true);
    f.setFilterIfMissing(true);
    return f;
}

/**
 * 获得小于等于过滤器。相当于SQL的 [字段] <= [值]
 * @param cf 列族名
 * @param col 列名
 * @param val 值
 * @return 过滤器
 */
public static Filter lteqFilter(String cf, String col, byte[] val) {
    SingleColumnValueFilter f = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.LESS_OR_EQUAL, val);
    f.setLatestVersionOnly(true);
    f.setFilterIfMissing(true);
    return f;
}

/**
 * 获得不等于过滤器。相当于SQL的 [字段] != [值]
 * @param cf 列族名
 * @param col 列名
 * @param val 值
 * @return 过滤器
 */
public static Filter neqFilter(String cf, String col, byte[] val) {
    SingleColumnValueFilter f = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.NOT_EQUAL, val);
    f.setLatestVersionOnly(true);
    f.setFilterIfMissing(true);
    return f;
}

/**
 * 和过滤器 相当于SQL的 的 and
 * @param filters 多个过滤器
 * @return 过滤器
 */
public static Filter andFilter(Filter... filters) {
    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);
    if(filters!=null && filters.length > 0) {
        if(filters.length > 1) {
            for (Filter f : filters) {
                filterList.addFilter(f);
            }
        }
        if(filters.length == 1) {
            return filters[0];
        }
    }
    return filterList;
}

/**
 * 和过滤器 相当于SQL的 的 and
 * @param filters 多个过滤器
 * @return 过滤器
 */
public static Filter andFilter(Collection<Filter> filters) {
    return andFilter(filters.toArray(new Filter[0]));
}



/**
 * 或过滤器 相当于SQL的 or
 * @param filters 多个过滤器
 * @return 过滤器
 */
public static Filter orFilter(Filter... filters) {
    FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE);
    if(filters!=null && filters.length > 0) {
        for(Filter f : filters) {
            filterList.addFilter(f);
        }
    }
    return filterList;
}

/**
 * 或过滤器 相当于SQL的 or
 * @param filters 多个过滤器
 * @return 过滤器
 */
public static Filter orFilter(Collection<Filter> filters) {
    return orFilter(filters.toArray(new Filter[0]));
}

/**
 * 非空过滤器 相当于SQL的 is not null
 * @param cf 列族
 * @param col 列
 * @return 过滤器
 */
public static Filter notNullFilter(String cf,String col) {
    SingleColumnValueFilter filter = new SingleColumnValueFilter(cf.getBytes(),col.getBytes(), CompareFilter.CompareOp.NOT_EQUAL,new NullComparator());
    filter.setFilterIfMissing(true);
    filter.setLatestVersionOnly(true);
    return filter;
}

/**
 * 空过滤器 相当于SQL的 is null
 * @param cf 列族
 * @param col 列
 * @return 过滤器
 */
public static Filter nullFilter(String cf,String col) {
    SingleColumnValueFilter filter = new SingleColumnValueFilter(cf.getBytes(),col.getBytes(), CompareFilter.CompareOp.EQUAL,new NullComparator());
    filter.setFilterIfMissing(false);
    filter.setLatestVersionOnly(true);
    return filter;
}

/**
 * 子字符串过滤器 相当于SQL的 like '%[val]%'
 * @param cf 列族
 * @param col 列
 * @param sub 子字符串
 * @return 过滤器
 */
public static Filter subStringFilter(String cf, String col, String sub) {
    SingleColumnValueFilter filter = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.EQUAL, new SubstringComparator(sub));
    filter.setFilterIfMissing(true);
    filter.setLatestVersionOnly(true);
    return filter;
}

/**
 * 正则过滤器 相当于SQL的 rlike '[regex]'
 * @param cf 列族
 * @param col 列
 * @param regex 正则表达式
 * @return 过滤器
 */
public static Filter regexFilter(String cf, String col , String regex) {
    SingleColumnValueFilter filter = new SingleColumnValueFilter(cf.getBytes(), col.getBytes(), CompareFilter.CompareOp.EQUAL, new RegexStringComparator(regex));
    filter.setFilterIfMissing(true);
    filter.setLatestVersionOnly(true);
    return filter;
}

实现In查询

Scan scan = new Scan();
scan.addFamily(“infos”.getBytes());
Filter filter = HBaseFilterUtil.orFilter(HBaseFilterUtil.eqFilter(“infos”,“name”,“aaa”.getBytes()),HBaseFilterUtil.eqFilter(“infos”,“name”,“bbb”.getBytes()));
scan.setFilter(filter);
ResultScanner res = table.getScanner(scan);
Result next = null;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值