首页 > 编程语言 >java查询hbase

java查询hbase

时间:2023-03-31 18:57:11浏览次数:62  
标签:java hadoop new 查询 import apache org hbase

Mark——java查询hbase,https://blog.csdn.net/weixin_46408961/article/details/124224169

查询Hbase数据分为Get方式查询,Scan方式查询,Scan配合Filter过滤查询

01.Get方式查询

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

public class SelectGetHbaseData {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum","192.168.1.10:2181");
        Connection conn = ConnectionFactory.createConnection(conf);
        Table gadaite = conn.getTable(TableName.valueOf("Gadaite"));
        Result result = gadaite.get(new Get(Bytes.toBytes("002")));
        Cell[] cells = result.rawCells();
        for(Cell cell:cells){
            System.out.println("INFO:   "+cell);
            System.out.println(new String(CellUtil.cloneRow(cell)));    //  行键
            System.out.println(new String(CellUtil.cloneFamily(cell)));     //  列簇
            System.out.println(new String(CellUtil.cloneQualifier(cell)));      //  字段
            System.out.println(new String(CellUtil.cloneValue(cell)));      //  值
            System.out.println(cell.getTimestamp());    //  时间戳
        }
        gadaite.close();
        conn.close();
    }
}

输出结果:

02.使用Scan查询

​ 下面查询全部,不进行过滤

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;

public class SelectScanAllHbaseData {
    public static void main(String[] args) throws Exception{
        //  连接信息,连接对象
        org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum","192.168.1.10:2181");
        Connection conn = ConnectionFactory.createConnection(conf);
        Admin admin = conn.getAdmin();

        //  连接Hbase数据库中的表
        Table gadaite = conn.getTable(TableName.valueOf("Gadaite"));
        Scan scan = new Scan();
        ResultScanner scanner = gadaite.getScanner(scan);

        //  读取Hbase表中的数据
        for(Result sc:scanner){
            //  sc:对应cell集合,Hbase的一个列簇
            for (Cell c:sc.rawCells()){
                //  c:sc的对象,对应一条数据
                String rowkey = new String(CellUtil.cloneRow(c));//行键
                String column = new String(CellUtil.cloneFamily(c));//列簇
                String field = new String(CellUtil.cloneQualifier(c));//字段
                String values = new String(CellUtil.cloneValue(c));//值
//                String s = new String(CellUtil.copyRow(c));//行键
                System.out.println(rowkey+" "+column+" "+field+" "+values);
//                System.out.println(s);
            }
        }
    }
}

输出结果:

03.使用scan结合filter进行过滤查询

3.1 按照行键值进行过滤

​ 关于CompareOperator.EQUAL方法类似的还有:

//  LESS <
//  LESS_OR_EQUAL <=
//  EQUAL =
//  NOT_EQUAL <>
//  GREATER_OR_EQUAL >=
//  GREATER >
//  NO_OP
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;

public class SelectScanRowkeyHbaseData {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum","192.168.1.10");
        Connection conn = ConnectionFactory.createConnection(conf);
        Table gadaite = conn.getTable(TableName.valueOf("Gadaite"));
        Scan scanrowkey = new Scan();
        //    匹配以2结尾的行键
        RowFilter rowFilter = new RowFilter(CompareOperator.EQUAL, new RegexStringComparator("2$"));
        scanrowkey.setFilter(rowFilter);
        ResultScanner scanner = gadaite.getScanner(scanrowkey);
        for(Result sc:scanner){
            //  sc:对应cell集合,Hbase的一个列簇
            for (Cell c:sc.rawCells()){
                //  c:sc的对象,对应一条数据
                String rowkey = new String(CellUtil.cloneRow(c));//行键
                String column = new String(CellUtil.cloneFamily(c));//列簇
                String field = new String(CellUtil.cloneQualifier(c));//字段
                String values = new String(CellUtil.cloneValue(c));//值
//                String s = new String(CellUtil.copyRow(c));//行键
                System.out.println(rowkey+" "+column+" "+field+" "+values);
//                System.out.println(s);
            }
        }
    }
}

输出结果:

3.2 按照列簇字段值进行过滤

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;
import org.apache.hadoop.hbase.util.Bytes;

public class SelectScanColumnHbaseData {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum","192.168.1.10");
        Connection conn = ConnectionFactory.createConnection(conf);
        Table gadaite = conn.getTable(TableName.valueOf("Gadaite"));
        Scan columnscan = new Scan();
        //  这里如果为没有满足筛选条件的值的时候会将空值所在的数据进行返回
        SingleColumnValueFilter columnfilter = new SingleColumnValueFilter(Bytes.toBytes("F2"), Bytes.toBytes("F21"),
                CompareOperator.EQUAL,Bytes.toBytes("G2.G21"));
        columnscan.setFilter(columnfilter);
        ResultScanner scanner = gadaite.getScanner(columnscan);
        for (Result sc:scanner){
            for (Cell c:sc.rawCells()){
                System.out.println(c);
                System.out.println(new String(CellUtil.cloneValue(c)));
            }
        }
    }
}

输出结果:

3.3 只查询某个列簇下的数据

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
import org.apache.hadoop.hbase.util.Bytes;
//  列名前缀过滤器
public class SelectColumnPrefixFilter {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum","192.168.1.10:2181");
        Connection conn = ConnectionFactory.createConnection(conf);
        Table gadaite = conn.getTable(TableName.valueOf("Gadaite"));
        Scan scan = new Scan();
        //  值返回指定列簇的数据
        ColumnPrefixFilter f2 = new ColumnPrefixFilter(Bytes.toBytes("F2"));
        scan.setFilter(f2);
        ResultScanner scanner = gadaite.getScanner(scan);
        for (Result sc:scanner){
            for (Cell c:sc.rawCells()){
                System.out.println(c);
                System.out.println(new String(CellUtil.cloneValue(c)));
            }
        }

    }
}

输出结果:

​如下为F2列簇

3.5 多条件集合查询

​ 如下,只查询行键为002,且只查询F2列簇下的数据

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.CellUtil;
import org.apache.hadoop.hbase.CompareOperator;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.filter.ColumnPrefixFilter;
import org.apache.hadoop.hbase.filter.FilterList;
import org.apache.hadoop.hbase.filter.RegexStringComparator;
import org.apache.hadoop.hbase.filter.RowFilter;
import org.apache.hadoop.hbase.util.Bytes;

//  多条件过滤集合

public class SelectSetFilter {
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        conf.set("hbase.zookeeper.quorum","192.168.1.10");
        Connection conn = ConnectionFactory.createConnection(conf);
        Table gadaite = conn.getTable(TableName.valueOf("Gadaite"));
        FilterList list = new FilterList();
        Scan scan = new Scan();
        RowFilter rowFilter = new RowFilter(CompareOperator.EQUAL, new RegexStringComparator("002"));
        ColumnPrefixFilter f2 = new ColumnPrefixFilter(Bytes.toBytes("F2"));
        list.addFilter(rowFilter);
        list.addFilter(f2);
        scan.setFilter(list);
        ResultScanner scanner = gadaite.getScanner(scan);
        for (Result sc:scanner){
            for (Cell c:sc.rawCells()){
                System.out.println(c);
                System.out.println(new String(CellUtil.cloneValue(c)));
            }
        }

    }
}

 输出结果:

标签:java,hadoop,new,查询,import,apache,org,hbase
From: https://www.cnblogs.com/tianyun5115/p/17277204.html

相关文章

  • 结合 操作系统、Java多线程 学习并发编程
    为什么我们需要考虑并发?不考虑的话会出现什么问题?并发的多个程序(进程/线程)会对计算机资源进行争夺,如果不加以控制会出现混乱、严重影响程序运行效率,甚至错误首先是对CPU时间片的争夺对于多线程编程而言,由于创建线程后,线程的执行顺序是由调度程序控制的,也就是说各个线程的执行顺......
  • java integer == integer返回 true 还是 false?
    理论:IntegerCache缓存JAVA的Integer有IntegerCache会缓存-128~127之间的对象。如:Integerx=100,会调用Integer的valueOf()方法,这个方法就是返回一个Integer对象,但是在返回前,作了一个判断,判断要赋给对象的值是否在[-128,127]区间中,且IntegerCache(是Integer类的内部类,里面有一......
  • 【Java】删除String数组中的所有空值
    1、封装一个方法/****去除String数组中的空值*/privateString[]deleteArrayNull(Stringstring[]){StringstrArr[]=string;//step1:定义一个list列表,并循环赋值ArrayList<String>strList=newArrayList<String>();......
  • JavaFx 行间距 margin
    自己边尝试边摸索,间距都调不了,气的呀。如有不足,请指正!spacing相当于margin-topmargin-bottomenvBox.setSpacing(20);insets能设置上下左右间距btn1.setOpaqueInsets(newInsets(0,10,0,0));vgap="10"上下间距hgap="10"左右间距 ......
  • MyBatis 框架的多表查询的实现
    1、表与表的联系类型一对一(1:1)一对多(1:n或n:1)多对多(n:m)2、Mybatis中实现多表查询的重要标签resultMap在Mybatis框架中,resultMap标签可以表示两个表之间的一对多和一对一关系。如:一个系可以有多个学生,如果想查询每个系的学生信息时,可以在Depar......
  • 系统化学习前端之JavaScript(ES6)
    前言ES6同样是ECMAScript的拓展,发布于2015年,目前多数浏览器对于部分ES6更新内容不支持,通常需要借助bable编译器编译成ES5或者ECMAScript早期版本语法去执行。ES6的学习推荐阮一峰老师的ES6教程。ES6ES6是ECMAScript最近一次较大版本的更新,更新内容主要是一......
  • 重学Java设计模式-结构型模式-享元模式
    重学Java设计模式-结构型模式-享元模式内容摘自:https://bugstack.cn/md/develop/design-pattern/2020-06-14-重学Java设计模式《实战享元模式》.html#重学-java-设计模式-实战享元模式「基于redis秒杀-提供活动与库存信息查询场景」享元模式介绍图片来自:https://refactorin......
  • 一文搞懂Java异常处理
    一、什么是异常处理在Java编程中,异常处理是一种机制,用于处理程序运行时可能出现的异常情况。当程序出现异常时,程序会抛出一个异常对象,如果不加以处理,程序就会终止运行。因此,我们需要使用异常处理机制来捕获并处理这些异常,以使程序能够在出现异常时继续运行。在Java中,异常处理主要......
  • 洛谷P3374 【模板】树状数组 1-(单点修改,区间查询)
    题目描述如题,已知一个数列,你需要进行下面两种操作:将某一个数加上 x求出某区间每一个数的和输入格式第一行包含两个正整数 n,m,分别表示该数列数字的个数和操作的总个数。第二行包含 n 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来 ......
  • 洛谷P3368 【模板】树状数组 2-(区间修改,单点查询)
    题目描述如题,已知一个数列,你需要进行下面两种操作:将某区间每一个数加上 x;求出某一个数的值。输入格式第一行包含两个整数 N、M,分别表示该数列数字的个数和操作的总个数。第二行包含 N 个用空格分隔的整数,其中第 i 个数字表示数列第 i 项的初始值。接下来......