HBase 进阶笔记

HBase 进阶笔记

高级查询

HBase的Java API提供了一些高级的查询功能。所谓的“高级”,其实一点也不高级,无非就是对HBase的表进行一些范围化的查询和数据的过滤,而不是用get仅取出一个行键的内容。

为了测试方便,我这里插入一些简单的测试数据,待会就是对这些数据进行查询:

put 'tab1','rk1','cf1:c1','val1'
put 'tab1','rk1','cf1:c2','val2'
put 'tab1','rk2','cf1:c1','val3'
put 'tab1','rk3','cf1:c2','val4'
put 'tab1','rk4','cf1:c3','val5'
put 'tab1','rk5','cf1:c4','val6'
put 'tab1','rk6','cf1:c1','val7'

执行后tab1表变成了下面这样子:

rk cf1:c1 cf1:c2 cf1:c3 cf1:c4
rk1 val1 val2
rk2 val3
rk3 val4
rk4 val5
rk5 val6
rk6 val7

很明显,这是一张比较稀疏的表。

Scan 查询

首先,我们可以利用Scan进行全表扫描:

package cn.lazycat.bdd.hbase.ext;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;

import java.io.IOException;
import java.util.Map;
import java.util.NavigableMap;

public class HBaseAdvDemo1 {
   

    public static void main(String[] args) throws IOException {
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "hadoop1:2181," +
                "hadoop2:2181,hadoop3:2181");
        HTable tab = new HTable(conf, "tab1".getBytes());

        // 创建scan对象
        Scan scan = new Scan();

        // 得到结果集
        ResultScanner rs = tab.getScanner(scan);

        // 遍历
        for (Result res : rs) {
            // 取得行键
            String rk = new String(res.getRow());

            // 取得每一列的数据
            // 注意三层泛型:
            // 1. byte[]表示列族的名称,Map表示列中储存的列信息
            // 2. byte[]表示列的名称,Map表示不同版本的列数据
            // 3. Long表示一个版本的时间戳,byte[]表示储存的具体数据
            NavigableMap<byte[], NavigableMap<byte[],
                    NavigableMap<Long, byte[]>>> map = res.getMap();

            // 遍历Map
            for (Map.Entry<byte[], NavigableMap<byte[],
                    NavigableMap<Long, byte[]>>> entry : map.entrySet()) {

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值