Hbase 多條件查詢


 /**
     * 獲得相等過濾器。相當於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;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM