2019独角兽企业重金招聘Python工程师标准>>>

问题导读:
1.如何根据rowkey模糊查询?
2.如何使用Comparator过滤rowkey?
3.如何查询rowkey中包含有某字符串的数据?

RowFilter用于过滤row key

Operator Description
LESS 小于
LESS_OR_EQUAL 小于等于
[EQUAL 等于
NOT_EQUAL 不等于
GREATER_OR_EQUAL 大于等于
GREATER 大于
NO_OP 排除所有
Comparator Description
BinaryComparator 使用Bytes.compareTo()比较
BinaryPrefixComparator 和BinaryComparator差不多,从前面开始比较
NullComparator Does not compare against an actual value but whether a given one is null, or not  null.
BitComparator Performs a bitwise comparison, providing a BitwiseOp class with OR, and XOR operators.
RegexStringComparator 正则表达式
SubstringComparator 把数据当成字符串,用contains()来判断
import java.io.IOException;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.filter.BinaryComparator;
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.Filter;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.filter.SubstringComparator;public class TestHbaseRowFilter {String tableName = "test_row_filter";Configuration config = HBaseConfiguration.create();/*** 部分代码来自hbase权威指南* @throws IOException*/public void testRowFilter() throws IOException {HTable table = new HTable(config, tableName);Scan scan = new Scan();System.out.println("小于等于row010的行");Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,new BinaryComparator("row010".getBytes()));scan.setFilter(filter1);ResultScanner scanner1 = table.getScanner(scan);for (Result res : scanner1) {System.out.println(res);}scanner1.close();System.out.println("正则获取结尾为5的行");Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator(".*5));scan.setFilter(filter2);ResultScanner scanner2 = table.getScanner(scan);for (Result res : scanner2) {System.out.println(res);}scanner2.close();System.out.println("包含有5的行");Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,new SubstringComparator("5"));scan.setFilter(filter3);ResultScanner scanner3 = table.getScanner(scan);for (Result res : scanner3) {System.out.println(res);}scanner3.close();System.out.println("开头是row01的");Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryPrefixComparator("row01".getBytes()));scan.setFilter(filter4);ResultScanner scanner4 = table.getScanner(scan);for (Result res : scanner4) {System.out.println(res);}scanner3.close();}/*** 初始化数据*/public void init() {// 创建表和初始化数据try {HBaseAdmin admin = new HBaseAdmin(config);if (!admin.tableExists(tableName)) {HTableDescriptor htd = new HTableDescriptor(tableName);HColumnDescriptor hcd1 = new HColumnDescriptor("data");htd.addFamily(hcd1);HColumnDescriptor hcd2 = new HColumnDescriptor("url");htd.addFamily(hcd2);admin.createTable(htd);}HTable table = new HTable(config, tableName);table.setAutoFlush(false);int count = 50;for (int i = 1; i <= count; ++i) {Put p = new Put(String.format("row%03d", i).getBytes());p.add("data".getBytes(), String.format("col%01d", i % 10).getBytes(), String.format("data%03d", i).getBytes());p.add("url".getBytes(), String.format("col%01d", i % 10).getBytes(), String.format("url%03d", i).getBytes());table.put(p);}table.close();} catch (IOException e) {e.printStackTrace();}}/*** @param args* @throws IOException*/public static void main(String[] args) throws IOException {TestHbaseRowFilter test = new TestHbaseRowFilter();test.init();test.testRowFilter();}}

复制代码

输出结果

小于等于row010的行
keyvalues={row001/data:col1/1364133382268/Put/vlen=7, row001/url:col1/1364133382268/Put/vlen=6}
keyvalues={row002/data:col2/1364133382268/Put/vlen=7, row002/url:col2/1364133382268/Put/vlen=6}
keyvalues={row003/data:col3/1364133382268/Put/vlen=7, row003/url:col3/1364133382268/Put/vlen=6}
keyvalues={row004/data:col4/1364133382268/Put/vlen=7, row004/url:col4/1364133382268/Put/vlen=6}
keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
keyvalues={row006/data:col6/1364133382268/Put/vlen=7, row006/url:col6/1364133382268/Put/vlen=6}
keyvalues={row007/data:col7/1364133382268/Put/vlen=7, row007/url:col7/1364133382268/Put/vlen=6}
keyvalues={row008/data:col8/1364133382268/Put/vlen=7, row008/url:col8/1364133382268/Put/vlen=6}
keyvalues={row009/data:col9/1364133382268/Put/vlen=7, row009/url:col9/1364133382268/Put/vlen=6}
keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
正则获取结尾为5的行
keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
包行有5的行
keyvalues={row005/data:col5/1364133382268/Put/vlen=7, row005/url:col5/1364133382268/Put/vlen=6}
keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
keyvalues={row025/data:col5/1364133382268/Put/vlen=7, row025/url:col5/1364133382268/Put/vlen=6}
keyvalues={row035/data:col5/1364133382268/Put/vlen=7, row035/url:col5/1364133382268/Put/vlen=6}
keyvalues={row045/data:col5/1364133382268/Put/vlen=7, row045/url:col5/1364133382268/Put/vlen=6}
keyvalues={row050/data:col0/1364133382268/Put/vlen=7, row050/url:col0/1364133382268/Put/vlen=6}
开头是row01的
keyvalues={row010/data:col0/1364133382268/Put/vlen=7, row010/url:col0/1364133382268/Put/vlen=6}
keyvalues={row011/data:col1/1364133382268/Put/vlen=7, row011/url:col1/1364133382268/Put/vlen=6}
keyvalues={row012/data:col2/1364133382268/Put/vlen=7, row012/url:col2/1364133382268/Put/vlen=6}
keyvalues={row013/data:col3/1364133382268/Put/vlen=7, row013/url:col3/1364133382268/Put/vlen=6}
keyvalues={row014/data:col4/1364133382268/Put/vlen=7, row014/url:col4/1364133382268/Put/vlen=6}
keyvalues={row015/data:col5/1364133382268/Put/vlen=7, row015/url:col5/1364133382268/Put/vlen=6}
keyvalues={row016/data:col6/1364133382268/Put/vlen=7, row016/url:col6/1364133382268/Put/vlen=6}
keyvalues={row017/data:col7/1364133382268/Put/vlen=7, row017/url:col7/1364133382268/Put/vlen=6}
keyvalues={row018/data:col8/1364133382268/Put/vlen=7, row018/url:col8/1364133382268/Put/vlen=6}
keyvalues={row019/data:col9/1364133382268/Put/vlen=7, row019/url:col9/1364133382268/Put/vlen=6}

复制代码

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

hbase RowFilter如何根据rowkey查询以及实例实现代码相关推荐

  1. java scan hbase_hbase+java实例,Scan查询所有、get根据rowkey查询一行或一列数据

    hbase+java实例,Scan查询所有.get根据rowkey查询一行或一列数据 import java.io.IOException; import java.text.SimpleDateFo ...

  2. HBASE+Solr实现详单查询--转

    原文地址:https://mp.weixin.qq.com/s?srcid=0831kfMZgtx1sQbzulgeIETs&scene=23&mid=2663994161&s ...

  3. 学习日志---hbase学习(最大版本查询)

    在HBase中 一个row对应的相同的列只会有一行.使用scan 或get 得到都是最新的数据 如果我们对这某一row所对应的列进行了更改操作后,并不会多生成一条数据,不会像RDBMS一样 inser ...

  4. 数据蒋堂 | 用HBase做高性能键值查询?

    作者:蒋步星 来源:数据蒋堂 本文共1400字,建议阅读9分钟.本文与你探讨HBase做高性能键值查询的可行性. 最近碰到几家用户在使用HBase或者试图使用HBase来做高性能查询,场景也比较类似, ...

  5. Docker selenium自动化 - 使用python操作docker,python运行、启用、停用和查询容器实例演示

    Docker selenium 自动化 - 使用 Python 操作 docker 运行.启用.停用和查询容器实例演示 第一章:Python 操作 docker ① python 运行 docker ...

  6. php安卓交互安全,php结合安卓客户端实现查询交互实例

    本文给大家分享的是php结合安卓客户端实现查询交互实例,java端主要分三步来实现:首先进行 http request.网络请求相关操作,第二步,使用execute方法发送HTTP GET请求,并返回 ...

  7. RDIFramework.NET 中多表关联查询分页实例

    RDIFramework.NET 中多表关联查询分页实例 RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用户和开发者最佳的.Net框架部署方案.该框架以SOA范式作为 ...

  8. oracle高级查询案例,oracle高级查询(实例基于scott用户四张表)

    oracle高级查询(实例基于scott用户四张表) 分组查询 多表查询 子查询 综合实例 ====================================================== ...

  9. python查询oracle数据库_python针对Oracle常见查询操作实例分析

    本文实例讲述了python针对Oracle常见查询操作.分享给大家供大家参考,具体如下: 1.子查询(难): 当进行查询的时候,发现需要的数据信息不明确,需要先通过另一个查询得到, 此查询称为子查询: ...

最新文章

  1. node编写定时任务,for循环只执行一遍的解决办法
  2. python源码编译 mingw_使用mingw32 在windows python26 下编译安装4suite-xml
  3. as转html5工具,将keras的h5模型转换为tensorflow的pb模型
  4. 小程序开发(13)-location定位
  5. sklearn adaboost_集成学习-从零推导和实现adaboost与3D可视化
  6. 20 个免费的 jQuery 的工具提示插件:
  7. 如何按比例裁剪图片?怎样改变图片形状?
  8. 核磁共振测井设备市场现状及未来发展趋势分析
  9. 支付宝企业转账到个人账户
  10. 向日葵公主与驴的爱情故事
  11. 全球新冠疫情可视化图表制作
  12. 虚拟机VMware安装Windows7保姆级教程
  13. html单元格文字首行缩进,刘启智问:excel里怎么首行缩进 Excel在表格中的文字要首行缩进二字符,该如何设置?...
  14. 1324. Print Words Vertically**
  15. excel求四分位数(QUARTILE 函数)
  16. java bidi_Java Bidi isRightToLeft()用法及代码示例
  17. python爬虫——正则表达式
  18. WPS JASPI调试器打开 WPS重要路径
  19. 魔鬼与牧师——动作分离版
  20. idea中好用的git shelve changes和stash changes

热门文章

  1. 从零开始学python微课视频版-从零开始学Python(微课视频版)
  2. python入门指南百度云-Python入门指南
  3. 简明python教程txt-Python:将 list 写入一个 txt 文件四种方法
  4. java中文乱码decode_java中文乱码
  5. UVa 12012 - Detection of Extraterrestrial(hash)
  6. LeetCode Maximum XOR of Two Numbers in an Array(贪心、字典树)
  7. LeetCode Coin Change(动态规划)
  8. UVa11300 Spreading the Wealth(数学问题)
  9. nginx_gzip压缩提升网站的传输速度
  10. day 29 socketsetserver 模块