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

  1. 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()来判断





  2. import java.io.IOException;

  3. import org.apache.hadoop.conf.Configuration;
  4. import org.apache.hadoop.hbase.HBaseConfiguration;
  5. import org.apache.hadoop.hbase.HColumnDescriptor;
  6. import org.apache.hadoop.hbase.HTableDescriptor;
  7. import org.apache.hadoop.hbase.client.HBaseAdmin;
  8. import org.apache.hadoop.hbase.client.HTable;
  9. import org.apache.hadoop.hbase.client.Put;
  10. import org.apache.hadoop.hbase.client.Result;
  11. import org.apache.hadoop.hbase.client.ResultScanner;
  12. import org.apache.hadoop.hbase.client.Scan;
  13. import org.apache.hadoop.hbase.filter.BinaryComparator;
  14. import org.apache.hadoop.hbase.filter.BinaryPrefixComparator;
  15. import org.apache.hadoop.hbase.filter.CompareFilter;
  16. import org.apache.hadoop.hbase.filter.Filter;
  17. import org.apache.hadoop.hbase.filter.RegexStringComparator;
  18. import org.apache.hadoop.hbase.filter.RowFilter;
  19. import org.apache.hadoop.hbase.filter.SubstringComparator;

  20. public class TestHbaseRowFilter {
  21.         String tableName = "test_row_filter";
  22.         Configuration config = HBaseConfiguration.create();

  23.         /**
  24.          * 部分代码来自hbase权威指南
  25.          * @throws IOException
  26.          */
  27.         public void testRowFilter() throws IOException {

  28.                 HTable table = new HTable(config, tableName);
  29.                 Scan scan = new Scan();

  30.                 System.out.println("小于等于row010的行");
  31.                 Filter filter1 = new RowFilter(CompareFilter.CompareOp.LESS_OR_EQUAL,
  32.                                 new BinaryComparator("row010".getBytes()));
  33.                 scan.setFilter(filter1);
  34.                 ResultScanner scanner1 = table.getScanner(scan);
  35.                 for (Result res : scanner1) {
  36.                         System.out.println(res);
  37.                 }
  38.                 scanner1.close();

  39.                 System.out.println("正则获取结尾为5的行");
  40.                 Filter filter2 = new RowFilter(CompareFilter.CompareOp.EQUAL,
  41.                                 new RegexStringComparator(".*5[        DISCUZ_CODE_0        ]quot;));
  42.                 scan.setFilter(filter2);
  43.                 ResultScanner scanner2 = table.getScanner(scan);
  44.                 for (Result res : scanner2) {
  45.                         System.out.println(res);
  46.                 }
  47.                 scanner2.close();

  48.                 System.out.println("包含有5的行");
  49.                 Filter filter3 = new RowFilter(CompareFilter.CompareOp.EQUAL,
  50.                                 new SubstringComparator("5"));
  51.                 scan.setFilter(filter3);
  52.                 ResultScanner scanner3 = table.getScanner(scan);
  53.                 for (Result res : scanner3) {
  54.                         System.out.println(res);
  55.                 }
  56.                 scanner3.close();

  57.                 System.out.println("开头是row01的");
  58.                 Filter filter4 = new RowFilter(CompareFilter.CompareOp.EQUAL,
  59.                                 new BinaryPrefixComparator("row01".getBytes()));
  60.                 scan.setFilter(filter4);
  61.                 ResultScanner scanner4 = table.getScanner(scan);
  62.                 for (Result res : scanner4) {
  63.                         System.out.println(res);
  64.                 }
  65.                 scanner3.close();
  66.         }

  67.         /**
  68.          * 初始化数据
  69.          */
  70.         public void init() {
  71.                 // 创建表和初始化数据
  72.                 try {
  73.                         HBaseAdmin admin = new HBaseAdmin(config);
  74.                         if (!admin.tableExists(tableName)) {
  75.                                 HTableDescriptor htd = new HTableDescriptor(tableName);
  76.                                 HColumnDescriptor hcd1 = new HColumnDescriptor("data");
  77.                                 htd.addFamily(hcd1);
  78.                                 HColumnDescriptor hcd2 = new HColumnDescriptor("url");
  79.                                 htd.addFamily(hcd2);

  80.                                 admin.createTable(htd);
  81.                         }

  82.                         HTable table = new HTable(config, tableName);

  83.                         table.setAutoFlush(false);
  84.                         int count = 50;
  85.                         for (int i = 1; i <= count; ++i) {
  86.                                 Put p = new Put(String.format("row%03d", i).getBytes());
  87.                                 p.add("data".getBytes(), String.format("col%01d", i % 10)
  88.                                                 .getBytes(), String.format("data%03d", i).getBytes());
  89.                                 p.add("url".getBytes(), String.format("col%01d", i % 10)
  90.                                                 .getBytes(), String.format("url%03d", i).getBytes());
  91.                                 table.put(p);
  92.                         }
  93.                         table.close();

  94.                 } catch (IOException e) {
  95.                         e.printStackTrace();
  96.                 }
  97.         }

  98.         /**
  99.          * @param args
  100.          * @throws IOException
  101.          */
  102.         public static void main(String[] args) throws IOException {
  103.                 TestHbaseRowFilter test = new TestHbaseRowFilter();
  104.                 test.init();
  105.                 test.testRowFilter();
  106.         }

  107. }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值