hbase过滤查询命令_hbase wal

hbase过滤查询命令_hbase wal前言: 本文详细介绍了 HBase FamilyFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。FamilyFilter 基于列族进行过滤,在工作中涉

HBase Filter 过滤器之FamilyFilter详解

前言:本文详细介绍了 HBase FamilyFilter 过滤器 Java&Shell API 的使用,并贴出了相关示例代码以供参考。FamilyFilter 基于列族进行过滤,在工作中涉及到需要通过HBase 列族进行数据过滤时可以考虑使用它。比较器细节及原理请参照之前的更文:HBase Filter 过滤器之比较器 Comparator 原理及源码学习

一。Java Api

头部代码

public class FamilyFilterDemo  {

    private static boolean isok = false;
    private static String tableName = "test";
    private static String[] cfs = new String[]{"f1","f2"};
    private static String[] data = new String[]{"row-1:f1:c1:v1", "row-2:f1:c2:v2", "row-3:f2:c3:v3", "row-4:f2:c4:v4"};

    public static void main(String[] args) throws IOException {

        MyBase myBase = new MyBase();
        Connection connection = myBase.createConnection();
        if (isok) {
            myBase.deleteTable(connection, tableName);
            myBase.createTable(connection, tableName, cfs);
            myBase.putRows(connection, tableName, data); // 造数据
        }
        Table table = connection.getTable(TableName.valueOf(tableName));
        Scan scan = new Scan();

代码100分

中部代码
向右滑动滚动条可查看输出结果。

1. BinaryComparator 构造过滤器

代码100分        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-1, row-2]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("f1"))); // [row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-1, row-2, row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes("f2"))); // [row-1, row-2]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-1, row-2]

2. BinaryPrefixComparator 构造过滤器

        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-1, row-2]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.NOT_EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.GREATER, new BinaryComparator(Bytes.toBytes("f1"))); // [row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.GREATER_OR_EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-1, row-2, row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS, new BinaryComparator(Bytes.toBytes("f2"))); // [row-1, row-2]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.LESS_OR_EQUAL, new BinaryComparator(Bytes.toBytes("f1"))); // [row-1, row-2]

3. SubstringComparator 构造过滤器

代码100分        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new SubstringComparator("1")); // [row-1, row-2]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator("f")); // []

4. RegexStringComparator 构造过滤器

        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.NOT_EQUAL, new RegexStringComparator("f")); // []
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("f")); // [row-1, row-2, row-3, row-4]
        FamilyFilter familyFilter = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new RegexStringComparator("2")); // [row-3, row-4]

尾部代码

        scan.setFilter(familyFilter);
        ResultScanner scanner = table.getScanner(scan);
        Iterator<Result> iterator = scanner.iterator();
        LinkedList<String> rowkeys = new LinkedList<>();
        while (iterator.hasNext()) {
            Result result = iterator.next();
            String rowkey = Bytes.toString(result.getRow());
            rowkeys.add(rowkey);
        }
        System.out.println(rowkeys);
        scanner.close();
        table.close();
        connection.close();
    }
}

二。Shell Api

1. BinaryComparator 构造过滤器

方式一:

hbase(main):002:0> scan "test",{FILTER=>"FamilyFilter(=,"binary:f1")"}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
2 row(s) in 0.1000 seconds

支持的比较运算符:= != > >= < <=,不再一一举例。

方式二:

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.BinaryComparator
import org.apache.hadoop.hbase.filter.FamilyFilter

hbase(main):006:0> scan "test",{FILTER => FamilyFilter.new(CompareFilter::CompareOp.valueOf("EQUAL"), BinaryComparator.new(Bytes.toBytes("f1")))}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
2 row(s) in 0.0350 seconds

支持的比较运算符:LESS、LESS_OR_EQUAL、EQUAL、NOT_EQUAL、GREATER、GREATER_OR_EQUAL,不再一一举例。

推荐使用方式一,更简洁方便。

2. BinaryPrefixComparator 构造过滤器

方式一:

hbase(main):007:0> scan "test",{FILTER=>"FamilyFilter(=,"binaryprefix:f1")"}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
2 row(s) in 0.0600 seconds

方式二:

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.BinaryPrefixComparator
import org.apache.hadoop.hbase.filter.FamilyFilter

hbase(main):011:0>  scan "test",{FILTER => FamilyFilter.new(CompareFilter::CompareOp.valueOf("EQUAL"), BinaryPrefixComparator.new(Bytes.toBytes("f1")))}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
2 row(s) in 0.0290 seconds

其它同上。

3. SubstringComparator 构造过滤器

方式一:

hbase(main):012:0> scan "test",{FILTER=>"FamilyFilter(=,"substring:f1")"}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
2 row(s) in 0.0400 seconds

方式二:

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.FamilyFilter

hbase(main):016:0> scan "test",{FILTER => FamilyFilter.new(CompareFilter::CompareOp.valueOf("EQUAL"), SubstringComparator.new("f1"))}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
2 row(s) in 0.0330 seconds

区别于上的是这里直接传入字符串进行比较,且只支持EQUAL和NOT_EQUAL两种比较符。

4. RegexStringComparator 构造过滤器

import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.RegexStringComparator
import org.apache.hadoop.hbase.filter.FamilyFilter

hbase(main):018:0> scan "test",{FILTER => FamilyFilter.new(CompareFilter::CompareOp.valueOf("EQUAL"), RegexStringComparator.new("f"))}
ROW                                              COLUMN+CELL
 row-1                                           column=f1:c1, timestamp=1588834369334, value=v1
 row-2                                           column=f1:c2, timestamp=1588834369334, value=v2
 row-3                                           column=f2:c3, timestamp=1588834369334, value=v3
 row-4                                           column=f2:c4, timestamp=1588834369334, value=v4
4 row(s) in 0.0600 seconds

该比较器直接传入字符串进行比较,且只支持EQUAL和NOT_EQUAL两种比较符。若想使用第一种方式可以传入regexstring试一下,我的版本有点低暂时不支持,不再演示了。

注意这里的正则匹配指包含关系,对应底层find()方法。

FamilyFilter 不支持使用LongComparator比较器,且BitComparator、NullComparator 比较器用之甚少,也不再介绍。

查看文章全部源代码请访以下GitHub地址:

https://github.com/zhoupengbo/demos-bigdata/blob/master/hbase/hbase-filters-demos/src/main/java/com/zpb/demos/FamilyFilterDemo.java

扫描二维码关注博主公众号

转载请注明出处!欢迎关注本人微信公众号【HBase工作笔记】

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/8529.html

(0)
上一篇 2023-02-26
下一篇 2023-02-26

相关推荐

  • MySQL数据篇(九)-[通俗易懂]

    MySQL数据篇(九)-[通俗易懂]需求:有一个活动记录表 t_ad ,商家每次发起一个活动,就会在 t_shake_devices_relation 表里面生成一些关联记录。现在写一个存储过程实现,如果活动过期,就将关联表里

    2022-12-19
    101
  • sql执行成功但是没有结果_sql2000怎么执行语句

    sql执行成功但是没有结果_sql2000怎么执行语句原因: pymysql在连接数据库的时候会有一个参数autocommit,表示执行完SQL语句是否自动提交到真正的数据库,默认为False,不自动提交,所以执行SQL语句后提示成功,但实际没有操作数据

    2023-02-20
    101
  • 工具 | 如何对 MySQL 进行 TPC-C 测试?[通俗易懂]

    工具 | 如何对 MySQL 进行 TPC-C 测试?[通俗易懂]作者:丁源 RadonDB 测试负责人 负责 RadonDB 云数据库、容器化数据库的质量性能测试,迭代验证。对包括云数据库以及容器化数据库性能和高可用方案有深入研究。 |背景 根据 DWorks 2

    2023-05-04
    100
  • Python教程示例:动手学习

    Python教程示例:动手学习Python是一种易于学习的编程语言。以下是Python的几个基本语法示例。

    2024-03-15
    26
  • dpsir框架_AI少女框架

    dpsir框架_AI少女框架DB4AI这个方向中,数据库通过集成AI能力,在用户进行AI计算时就可以避免数据搬运的问题。不同于其他的DB4AI框架,本次openGauss开源的原生框架是通过添加AI算子的方式完成数据库中的AI计

    2023-06-17
    97
  • 用Python创建精美的画布

    用Python创建精美的画布画布是图形界面程序的核心,可以用于显示图形、图片、动画等,同时也可以用于数据可视化和图表绘制。下面我们将介绍如何用Python创建精美的画布,让你的程序更加生动有趣。主要包括以下几个方面:

    2024-02-14
    48
  • Cassandra 简介「终于解决」

    Cassandra 简介「终于解决」Cassandra是云原生和微服务化场景中最好的NoSQL数据库。我信了~ 1. Cassandra是什么 高可用性和可扩展的分布式数据库 Apache Cassandra™是一个开源分布式数据,可提

    2023-02-26
    109
  • mysql主从(windows)

    mysql主从(windows)mysql windows主从 准备环境 数据库版本 主数据库版本 5.7.21 从数据库版本 5.7.25 只要数据库的前两个版本号一致,那么就可以进行主从同步。 主数据库开启binlog 日志 …

    2023-03-28
    114

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注