Hbase过滤器小结

  • rowkey过滤器

RowFilter 实现行键字符串的比较和过滤
PrefixFilter rowkey前缀过滤器
KeyOnlyFilter 只对单元格的键进行过滤和显示,不显示值
FirstKeyOnlyFilter 只扫描显示相同键的第一个单元格,其键值对会显示出来
InclusiveStopFilter 替代 ENDROW 返回终止条件行

  • 列过滤器

FamilyFilter 列簇过滤器
QualifierFilter 列标识过滤器,只显示对应列名的数据
ColumnPrefixFilter 对列名称的前缀进行过滤
MultipleColumnPrefixFilter 可以指定多个前缀对列名称过滤
ColumnRangeFilter 过滤列名称的范围

  • 值过滤器

ValueFilter 值过滤器,找到符合值条件的键值对
SingleColumnValueFilter 在指定的列蔟和列中进行比较的值过滤器
SingleColumnValueExcludeFilter 排除匹配成功的值

  • 其他过滤器

ColumnPaginationFilter 对一行的所有列分页,只返回 [offset,offset+limit] 范围内的列
PageFilter 对显示结果按行进行分页显示
TimestampsFilter 时间戳过滤,支持等值,可以设置多个时间戳
ColumnCountGetFilter 限制每个逻辑行返回键值对的个数,在 get 方法中使用
DependentColumnFilter 允许用户指定一个参考列或引用列来过滤其他列的过滤器

Hbase的过滤器API:


 /**
     * 过滤器扫描(返回过滤器指定条件的记录,即类似于搜索功能) --- 精准匹配/模糊
     * @param cf 列族
     * @param initValues map记录需要设定值的列和对应值进行过滤数据,例如:{(cmd,delete),(dir,xxx)} ---注意:时间是给定了timeStart + timeStop俩个键值来划定时间范围的
     *                   时间的格式是 例:2022-05-26 12:10:44  -> 20220526121044  (hbase的time存储格式)
     * @param showColumns 向外展示的列     例如只展示 {dir,user}
     * @param isAccurate 初始值为true,表示进行精准查询,为false则表示模糊查询
     * @throws IOException
     */
    public static void filterScan(String cf, Map<String,String> initValues ,ArrayList<String> showColumns ,boolean isAccurate) throws IOException {
        ArrayList<JSONObject> results = new ArrayList<JSONObject>();
        try {
            ArrayList<Filter> filters = new ArrayList<Filter>();
            //1、过滤rowKey--(排除预分区的随机数影响)+rowKey设计方式
            String rowKeyRegex = getRowKeyRegex(initValues.get(HBASE_HDFSAUDITLOG_COLUMN_DIR));
            String regexRowKey="^0{2}[01]\\d{1}"+rowKeyRegex+".*";
            RowFilter rowFilter = new RowFilter(CompareOperator.EQUAL, new RegexStringComparator(regexRowKey));
            filters.add(rowFilter);

            //2、根据用户选定对应列的值对数据进行筛选(cluster=xxx,dir=xxx,)
            Iterator<String> keyIt = initValues.keySet().iterator();
            String key=keyIt.next();
            while (key !=null){
                if (key.equals("timeStart")){
                    filters.add(new SingleColumnValueFilter(Bytes.toBytes(cf),
                            Bytes.toBytes(key),
                            CompareOperator.GREATER_OR_EQUAL,
                            Bytes.toBytes(initValues.getOrDefault(key,"默认值???--默认7天数据还是所有? 系统获取时间"))));
                }else if(key.equals("timeStop")){
                    filters.add(new SingleColumnValueFilter(Bytes.toBytes(cf),
                            Bytes.toBytes(key),
                            CompareOperator.LESS_OR_EQUAL,
                            Bytes.toBytes(initValues.getOrDefault(key,"默认值???--默认7天数据还是所有? 系统获取时间"))));
                }
                if (isAccurate == false && key.equals(HBASE_HDFSAUDITLOG_COLUMN_DIR)){
                    //处理模糊查询 -- 针对hbase的dir (/a/b/c --> 包含该路径的所有路径:regex)
                    filters.add(new SingleColumnValueFilter(Bytes.toBytes(cf),
                            Bytes.toBytes(key),
                            CompareOperator.EQUAL,
                            new RegexStringComparator("^"+key+".*")
                    ));
                }else {
                    filters.add(new SingleColumnValueFilter(Bytes.toBytes(cf),
                            Bytes.toBytes(key),
                            CompareOperator.EQUAL,
                            Bytes.toBytes(initValues.get(key))));
                }

                key=keyIt.next();
            }

Java-API 官方地址:Apache HBase 3.0.0-alpha-3-SNAPSHOT API

参考文章:HBase的JavaAPI使用--进阶篇--过滤器的使用_wx602610c6448b8的技术博客_51CTO博客

Hbase过滤器_it噩梦的博客-CSDN博客_hbase过滤器

重点参考:https://blog.csdn.net/godlovedaniel/article/details/104600637

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值