经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 大数据/云/AI » Hadoop » 查看文章
hbase 过滤器 rowfilter
来源:cnblogs  作者:西瓜哥119  时间:2019/3/27 12:05:14  对本文有异议

HBase为筛选数据提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。通常来说,通过行键,值来筛选数据的应用场景较多。

 

1.创建测试表studnet1

 

Vi Student1.java

  1. import java.io.IOException;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.client.HBaseAdmin;
  4. import org.apache.hadoop.hbase.client.HTable;
  5. import org.apache.hadoop.hbase.HColumnDescriptor;
  6. import org.apache.hadoop.hbase.HTableDescriptor;
  7. import org.apache.hadoop.hbase.util.Bytes;
  8. import org.apache.hadoop.hbase.client.Put;
  9. public class Student1{
  10. public static void main(String[] args){
  11. HBaseConfiguration config = new HBaseConfiguration();
  12. config.set("hbase.zookeeper.quorum", "h201,h202,h203");
  13. String tablename = new String("student1");
  14. try{
  15. HBaseAdmin admin = new HBaseAdmin(config);
  16. if(admin.tableExists(tablename)){
  17. admin.disableTable(tablename);
  18. admin.deleteTable(tablename);
  19. }
  20. HTableDescriptor tableDesc = new HTableDescriptor(tablename);
  21. tableDesc.addFamily(new HColumnDescriptor("cf1"));
  22. admin.createTable(tableDesc);
  23. admin.close();
  24. HTable table = new HTable(config, Bytes.toBytes("student1"));
  25. Put put1 = new Put(Bytes.toBytes("a101"));
  26. put1.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("zs1"));
  27. Put put2 = new Put(Bytes.toBytes("a102"));
  28. put2.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("ls1"));
  29. Put put3 = new Put(Bytes.toBytes("a103"));
  30. put3.add(Bytes.toBytes("cf1"),Bytes.toBytes("name"),Bytes.toBytes("ww1"));
  31. table.put(put1);
  32. table.put(put2);
  33. table.put(put3);
  34. table.close();
  35. } catch(IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }
  1. 使用过滤器

1.1

RowFilter:筛选出匹配的所有的行,对于这个过滤器的应用场景,是非常直观的:使用BinaryComparator可以筛选出具有某个行键的行,或者通过改变比较运算符(CompareFilter.CompareOp.EQUAL)来筛选出符合某一条件的多条数据

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差不多,从前面开始比较

RegexStringComparator

正则表达式

SubstringComparator

把数据当成字符串,用contains()来判断

  1. import java.io.IOException;
  2. import org.apache.hadoop.hbase.HBaseConfiguration;
  3. import org.apache.hadoop.hbase.client.HTable;
  4. import org.apache.hadoop.hbase.client.Scan;
  5. import org.apache.hadoop.hbase.client.ResultScanner;
  6. import org.apache.hadoop.hbase.client.Result;
  7. import org.apache.hadoop.hbase.util.Bytes;
  8. import org.apache.hadoop.hbase.KeyValue;
  9. import org.apache.hadoop.hbase.filter.RowFilter;
  10. import org.apache.hadoop.hbase.filter.Filter;
  11. import org.apache.hadoop.hbase.filter.BinaryComparator;
  12. import org.apache.hadoop.hbase.filter.CompareFilter;
  13. public class hss1{
  14. public static void main(String[] args){
  15. HBaseConfiguration config = new HBaseConfiguration();
  16. config.set("hbase.zookeeper.quorum", "h201,h202,h203");
  17. try{
  18. HTable table = new HTable(config, Bytes.toBytes("student1"));
  19. Scan scan = new Scan();
  20. Filter filter1 = new RowFilter(CompareFilter.CompareOp.EQUAL,new BinaryComparator("a101".getBytes()));
  21. scan.setFilter(filter1);
  22. ResultScanner rst = table.getScanner(scan);
  23. for (Result r:rst){
  24. for (KeyValue kv : r.raw()) {
  25. StringBuffer s1 = new StringBuffer()
  26. .append(Bytes.toString(kv.getRow())).append(":")
  27. .append(Bytes.toString(kv.getFamily())).append(",")
  28. .append(Bytes.toString(kv.getQualifier())).append(",")
  29. .append(Bytes.toString(kv.getValue()));
  30. System.out.println(s1.toString());
  31. }
  32. }
  33. rst.close();
  34. table.close();
  35. } catch(IOException e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. }

1.2
PrefixFilter:筛选出具有特定前缀的行键的数据。这个过滤器所实现的功能其实也可以由RowFilter结合RegexStringComparator来实现,不过这里提供了一种简便的使用方法

import org.apache.hadoop.hbase.filter.PrefixFilter;
Filter filter2 = new PrefixFilter(Bytes.toBytes("a"));
scan.setFilter(filter2);

1.3
RegexComparator 正则过滤
import org.apache.hadoop.hbase.filter.RegexStringComparator;
Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,new RegexStringComparator("^a.*"));
 scan.setFilter(filter3);

 

原文链接:http://www.cnblogs.com/xiguage119/p/10605721.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号