HBase是一个分布式的、面向列的开源数据库,不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

项目中用到了hbase数据库,因为查询方式和以前用过的数据库很不同所以,想将摸索过程记录下来以便之后查看。

hbase查询最大的不同在于它使用了rowkey,通过扫描rowkey可以最快速的对数据进行查询,所以在建表初期rowkey的设计工作就尤为重要,因为会影响之后查找的使用工作。hbase的扫描查找分为get\scan两种,get为获取单行数据,而scan为获取多行数据,此处主要讲解scan查询。而查询方式也分为两种,一种就是针对rowkey的查询,一种就是针对列簇family和字段qualifier的使用过滤器查询。

在项目中使用的基本流程为先创建config(hbase数据库基本配置信息)

Configuration conf = HBaseConfiguration.create();

在set好配置信息之后创建hbase表对象

HTable ht = new HTable(conf, "tableName");

创建好之后就开始构造scan扫描器了,scan不进行具体配置的话为全表扫描,使用ResultScanner对象接收查询结果。

Scan scan = new Scan();

ResultScanner rs = ht.getScanner(scan);

Scan类的属性配置简要的罗列几条如下:

caching 影响一次读取返回的Results数量;

Batch 限定了一个Result中所包含的列的数量,如果一行数据被请求的列的数量超出Batch限制,那么这行数据会被拆成多个Results。;

storeLimit Scan操作所获取的行的数量 ;

storeOffset Scan操作所获取的哪页的数据 ;

CacheBlocks: RegionServer侧是否要缓存本次Scan所涉及的HFileBlocks ;

Raw 是否可以读取到删除标识以及被删除但尚未被清理的数据 ;

MaxResultSize: 从内存占用量的维度限制一次Scan的返回结果集 ;

Reversed 反向扫描 ;

allowPartialResults 允许返回部分结果 ;

loadColumnFamiliesOnDemand 按需载入列族;

接下来将详细介绍不同的查询类型:

1、首先是rowkey查询,这种查询方式是最常用的,使用rowkey的scan构造器

Scan scan = new Scan(startrow,stoprow);

注意,使用rowkey扫描时,结果集为[startrow,stoprow)的形式,如果想不包含startrow或者包含stoprow可以再尾部加上0;

如果存在不确定rowkey的值的情况:例如,某个表的rowkey形式为【shop_月份_门店iD】,如果是想取出该门店所有月份数据,设id=1 * 可

将startRow定为shop_*_1,将stopRow定为shop_~_1。

2、之后就是过滤器查询,当rowkey的满足不了查询需求时可以考虑使用过滤器查询,基本流程就是创建FilterList(过滤器组),再创建SingleColumnValueFilter设计详细的过滤信息放入过滤组中,即可查询。

FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL);

构造器中的参数FilterList.Operator,是为了配置多过滤器且或关系的,

FilterList.Operator.MUST_PASS_ALL为需要过滤器都符合

FilterList.Operator.MUST_PASS_ONE为一个过滤器符合即可

之后开始构建单体过滤器SingleColumnValueFilter,最常使用的构造器为

SingleColumnValueFilter(byte[] family, byte[] qualifier, CompareOp compareOp, byte[] value)

family为列族,qualifier为字段名,value未查询的值,而compareOP为比较运算符 CompareFilter.CompareOp,枚举值如下:

LESS 小于

LESS_OR_EQUAL 小于等于

EQUAL 相等

NOT_EQUAL 不等于

GREATER_OR_EQUAL 大于等于

GREATER 大于

NO_OP 不包含

除了最基本的使用方法外还可以使用比较器,构造器与上述相似,就是将value值变为比较器即可,比较器的类型大致分为:

BinaryComparator 匹配完整字节数组

BinaryPrefixComparator 匹配字节数组前缀

BitComparator  不常用

NullComparator  不常用

RegexStringComparator 匹配正则表达式

SubstringComparator 匹配子字符串

scan查询还有很多细节,需要在开发过程中慢慢掌握。

hbase java api 查询_hbase查询api的基本使用相关推荐

  1. hbase 按时刻查询_Hbase查询工具类,根据时间查询数据

    1,需求:已知空气监测数据在hbase中存储,要求按照时间,查询citycode为110000(北京)一个月的数据,数据为每日的监测数据 ID ,CITYCODE,SO2 ,CO,NO2 ,O3, P ...

  2. hbase倒序查询_Hbase 查询Scan速度优化

    发表于 2020-06-11 18:27:41 by 月小升 成果:2020.06.11 两步改完,程序扫描1000万的Hbase从4秒,变成58ms 2020.06.11 第一步:为Scan 设置F ...

  3. java scan hbase_hbase+java实例,Scan查询所有、get根据rowkey查询一行或一列数据

    hbase+java实例,Scan查询所有.get根据rowkey查询一行或一列数据 import java.io.IOException; import java.text.SimpleDateFo ...

  4. hbase java api 查询_java api 查询hbase

    考虑到Java代码一般就是查询hbase存储的hadoop运算的结果数据,下面记录下查询的简单范例代码 package com.lvmama.crm.web.controller.csVipManag ...

  5. java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

    elasticsearch组合多条件查询实现restful api以及java代码实现 实际开发中,基本都是组合多条件查询. elasticsearch提供bool来实现这种需求: 主要参数: mus ...

  6. java查询序列_基于JAVA的苹果序列号查询api调用代码实例

    代码描述:基于JAVA的苹果序列号查询api调用代码实例 关联数据:苹果序列号 接口地址:http://www.juhe.cn/docs/api/id/37 1.[代码][Java]代码 import ...

  7. java查询elasticsearch_elasticsearch查询所有数据restful api以及java代码实现

    elasticsearch查询所有数据restful api以及java代码实现 restful api实现如下: 返回所有数据: Java代码实现:/** * 查询所有 * @throws Exce ...

  8. java第16次作业API接口查询天气

    package com.imooc.weather;import com.imooc.weather.impl.WeatherUtilsImpl;import java.util.List; impo ...

  9. java分页显示12345_elasticsearch分页查询数据restful api以及java代码实现

    elasticsearch分页查询数据restful api以及java代码实现 restful api实现如下: { "from": 0, "size": 2 ...

最新文章

  1. NC:噬菌体中无机硫辅助代谢基因的生态学研究
  2. 推荐3款 Docker 认证的实用免费插件,帮助您快速构建云原生应用程序!
  3. EasyUi通过OCUpload上传及POI上传 实现导入xls表格功能
  4. Activiti第二篇【管理流程定义、执行任务和流程实例、流程变量】
  5. python 华泰证券 客户端_华泰证券网上交易系统(高级版)下载 v8.13官方版下载
  6. html5做一个展示页面,基于HTML5的WebGL实现json和echarts图表展现在同一个界面
  7. iOS谁说我不能执行你
  8. 【转】 Objective C实现多继承
  9. java showtype_GitHub - kedarui/showapi_sdk_java: showapi_sdk_java
  10. ActiveMQ下载安装使用教程
  11. compositionAPI
  12. 树莓派3B+安装系统(Raspbian)以及配置环境
  13. 【海洋科学】高精度地形数据画出的水深图
  14. python的基础讲解
  15. Python爬虫方法三部曲之二-实战训练
  16. HTML5属性选择器以什么开头,CSS3 选择器 属性选择器介绍
  17. 【附源码】计算机毕业设计java综合众筹网站设计与实现
  18. 我平时整理的一个生成机器码的类(转载)
  19. 怎么查看html页面,网页浏览记录如何查看_怎样查历史网页浏览记录-win7之家
  20. ARM服务器再添生力军,超云发布两款ARM服务器

热门文章

  1. 信号与系统(一):响应的分类和联系(通解、特解,暂态、稳态,零输入、零状态)、稳定性、传递函数
  2. eBPF 双子座:天使 or 恶魔?
  3. 使用Python完成曾火爆全网的图片转符号图片、GIF图像转字符GIF动画操作
  4. 高低温测试检测项目及标准
  5. カスタムボタン 一括削除
  6. 网站页面优化的几个注意事项
  7. 我可以蹲下来,陪你做一只蘑菇
  8. 由对称性知定点一定在x轴上_在平面直角坐标系中,点P(x,y)为动点,已知点...
  9. 关于C++中string头文件的用法
  10. 怀孕计算机考试吗,怀孕上班可以打电脑吗