博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Hbase查询小结:先缩小范围,再使用正则进行过滤
阅读量:7140 次
发布时间:2019-06-28

本文共 2230 字,大约阅读时间需要 7 分钟。

hot3.png

最近在做大数据分析结果的展示。宗旨:存进去,取出来,看似简单其实不易。经过这几天的不懈努力终于找到了中上等的hbase key的设计方式。 

key的设计:时间+类型一+类型二+(long的最大值-此条数据的value)+…… 
查询代码:

/*** 根据startRowKey和endRowKey筛选出区间,然后根据regxKey正则匹配和num查出最终的结果* @param tableName 表名* @param startRowKey 开始的范围* @param endRowKey 结束的范围* @param regxKey 正则匹配* @param num 查询的条数* @return List
*/public List
getNumRegexRow(String tableName,String startRowKey,String endRowKey, String regxKey,int num) { HTableInterface table = null; List
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
() ; for (Result rs : scanner) { list.add(rs) ; } } catch (Exception e) { e.printStackTrace() ; } finally { try { table.close() ; } catch (IOException e) { e.printStackTrace(); } } return list; }

 

进行测试举例:

List
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则是你所要取的数据的个数(从大到小)。

转载于:https://my.oschina.net/u/3346994/blog/1923980

你可能感兴趣的文章
VMware 虚拟机设置U盘启动(老毛桃 PE)
查看>>
程序员注意了!这样的公司千万不要去!
查看>>
文件服务器--samba和ftp的搭建
查看>>
我的友情链接
查看>>
ubuntu 14.10桌面登陆失败
查看>>
java并发编程,ThreadLocal源码解析
查看>>
textbox只能输入数字
查看>>
Summer School实验二
查看>>
sed命令的使用及案例
查看>>
GoLang环境配置
查看>>
JAVA构建缓存
查看>>
JS中使用正则表达式
查看>>
我的友情链接
查看>>
VM with share disk configuration
查看>>
解决:Loading kernel module CAP_SYS_MODULE CAP_NET_ADMIN alias netdev-eth0 instead
查看>>
oracle 常用查询
查看>>
QT常用类
查看>>
PHP cURL下载/导出文件
查看>>
java之ArrayList集合
查看>>
系统集成项目管理工程师2011年下半年试题
查看>>