Hbase查询小结:先缩小范围,再使用正则进行过滤
来源:互联网 发布:js产生随机数的函数 编辑:程序博客网 时间:2024/06/05 22:32
最近在做大数据分析结果的展示。宗旨:存进去,取出来,看似简单其实不易。经过这几天的不懈努力终于找到了中上等的hbase key的设计方式。
key的设计:时间+类型一+类型二+(long的最大值-此条数据的value)+……
查询代码:
/*** 根据startRowKey和endRowKey筛选出区间,然后根据regxKey正则匹配和num查出最终的结果* @param tableName 表名* @param startRowKey 开始的范围* @param endRowKey 结束的范围* @param regxKey 正则匹配* @param num 查询的条数* @return List<Result>*/public List<Result> getNumRegexRow(String tableName,String startRowKey,String endRowKey, String regxKey,int num) { HTableInterface table = null; List<Result> list = null; try { table = hTablePool.getTable(tableName) ; //创建一个过滤器容器,并设置其关系(AND/OR) FilterList fl = new FilterList(FilterList.Operator.MUST_PASS_ALL); //设置正则过滤器 RegexStringComparator rc = new RegexStringComparator(regxKey); RowFilter rf = new RowFilter(CompareOp.EQUAL, rc); //过滤获取的条数 Filter filterNum = new PageFilter(num);//每页展示条数 //过滤器的添加 fl.addFilter(rf); fl.addFilter(filterNum); Scan scan = new Scan(); //设置取值范围 scan.setStartRow(startRowKey.getBytes());//开始的key scan.setStopRow(endRowKey.getBytes());//结束的key scan.setFilter(fl);//为查询设置过滤器的list ResultScanner scanner = table.getScanner(scan) ; list = new ArrayList<Result>() ; for (Result rs : scanner) { list.add(rs) ; } } catch (Exception e) { e.printStackTrace() ; } finally { try { table.close() ; } catch (IOException e) { e.printStackTrace(); } } return list; }
进行测试举例:
List<Result> list = hbaseUtil.getNumRegexRow("student","201611241440vmhardware.disk.read.bps","201611241440vmhardware.disk.read.bpsA","201611241440vmhardware\\.disk\\.read\\.bps.*",100);
原理:
①hbase会根据key值进行默认排序,所以我们的数据会按先照时间排序,然后再按照类型一排序,再按照类型二排序,再按照value从大到小(你应该懂得~~)的方式排序。
②范围201611241440vmhardware.disk.read.bps到201611241440vmhardware.disk.read.bpsA是因为A比任意一个数字都大
③201611241440vmhardware\.disk\.read\.bps.*代表你要根据需求拼成的正则表达式
④100则是你所要取的数据的个数(从大到小)。
希望能帮助到大家~~(有不明白的地方或者错误/建议欢迎留言指出)
0 0
- Hbase查询小结:先缩小范围,再使用正则进行过滤
- 关联查询是否需要先缩小查询范围?
- Hbase过滤查询
- LIKE模糊查询、使用IN进行范围查询
- Hbase的后缀过滤查询
- Android EditText 使用正则表达式进行输入过滤
- WHERE子句使用正则表达式进行搜索过滤
- hbase过滤查询的两种方式
- 关于hbase过滤查询的一些
- java spark hbase scan过滤查询
- 使用zepplin查询hbase
- Sicily 1119. Factstone Benchmark | 使用log函数缩小数值范围
- Tair LDB基于Prefixkey的范围查找性能优化项目之如何使用prefix bloomfilter进行过滤
- mongodb中根据时间范围进行查询
- iOS上直接缩小UIImageView的大小会产生锯齿,可以先将其缩放后再使用.
- HBase.使用shell脚本进行HBase操作
- 正则表达式使用小结
- 使用MapReduce结合HBase Filter过滤数据
- C&C 服务器,亟需警惕的木马主犯
- 机器人操作系统ROS Indigo 入门学习(3)——文件系统导航
- 输入法学习笔记
- Android软键盘挡住输入框问题的终极解决方案
- VMware Workstation该虚拟机似乎正在使用中解决方法
- Hbase查询小结:先缩小范围,再使用正则进行过滤
- 树莓派python环境安装第三方库的方法
- Hive报错:FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.mr.MapRedTask
- 一不变应万变
- 润乾报表放入WEBINF保护目录下如何实现
- linux下nginx服务应用总结(1)--基础认识和环境应用
- Mybatis MapperScannerConfigurer 自动扫描 将Mapper接口生成代理注入到Spring
- Error running Tomcat8: Address localhost:1099 is already in use
- plsql developer快捷键设置