HBase代码_6 | 学习笔记

简介: 快速学习 HBase代码_6

开发者学堂课程【HBase入门教程HBase代码_6】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/397/detail/5078


HBase代码_6


一、代码操作

把之前的表清空掉,从新创建;找到 createTb1在给它重新创建(右键 èRun Asè1 Junit Test 代码如下:)

代码:

public void createTbl() throws Exception {

if (hBaseAdmin. tableExists (TN)) {

hBaseAdmin. disableTable (TN) ;

hBaseAgmin. deleteTable (TN) ;}

创建表它会把之前的禁用掉,然后在删除掉。执行完成之后在插入一些数据,先看一下这个方法:(代码如下:)

代码:

/**

*随机生成时间

* @param year年份

*@return

*/

public String getDate (String year) {

return year + String. format ("%02d%02d%02d%02d %02d",

new Object[]{r.nextInt(12)+1, r.nextInt(29) +1,

r.nextInt(60)r.nextInt(60) r.nextInt(60)});

}

先看一下这个方法,028+1,也就是129,这个是天数;12+1这个是月份;059这个是时分秒。

我们把数据插入进去,找到 insertDB(右键 èRun Asè1 Junit Test 代码如下:代码如下:)

代码:

@Test

public void insertDB() throws Exception {

List puts = new ArrayList () ;

for (int i =0Fi< 10:1++) {

String rowkey;

String ptioneNum = getPhoneNum("186") ;

…(下面代码省略)

让它自己插入进去。

下面的图片 routk,实际上是看不出来的,使用 HBase 来找一条数据来观察一下:

代码:

# Hbase shell

>scan phone

找一下那个月份下面有数据,随便拿一个手机号:19869973212790,这个手机号在一月份下面一定有数据。有一个问题,刚刚代码里面由于该 bug,刚刚是不是拿到时间,这个时间是在循环里面取的,一条循环对应了一个时间。(可以在下图观察)

image.png

先输出一下,把一月份的数据拿出,先拿到一个手机号:186997321127。(把下列加红的修改掉)

代码:

//186997321127  2016年二月份的通话账单

Scan scan = new Scan();

SimpleDateFormat sdf = new SimpleDateFormat ("yyyyMMddHHmmss") ;

String startRowkey = "18699732127" + (Long.MAX VALUE-sdf.parse("20160201000000").getTime());

scan. setStartRow (startRowkey. getBytes());

String stopRowkey = "18699732127" + (Long.MAX_ VALUE-sdf.parse("20160101000000").getTime());

scan. setStopRow (stopRowkey .getBytes()) ;

然后在进行输出。(找到 scanDB 右键 èRun Asè1 Junit Test 输出),观察下列输出的数据时间,是一月282925的数据,在观察25号的数据,1413是不是做了一个降序,这就按照我们的要求出来了。这种方式要注意了,我们做一个降序,我们本身在 hbase 里面存储的时候,它是按照升序来做的。要改变它的排序方式,就可以用最大值减去这个值,就可以做一个升序的排序了。

输出数据:

1- 20160129371521-17073565534

1- 20160128451917- 17046965986

0-20160128343157-17046819077

1-20160125142700-1 7083734845

1-20160125120850- 17017869843

另一种方法,在文档的 chapter 66.client request filters 这个下面。在66.1.1.filterlist 下面举了一个例子:

代码:

FilterList list = new FilterList(FilterList .Operator .MUST PASS _ONE);

SingleColumnValueFilter filterl = new SingleColunValueFilter(

Cf,

column,

CompareOp.EQUALI,

Bytes. toBytes("my value"));

list .add(filter1);

SingleColumnValueFilter filter2 = nem SingleColumnValueFilter(

Cf,

Column,

Compar eOp. EQUAL,

Bytes. toBytes("my other value")};

list. add(filter2);

scan. setFilter(list);

setFilterlist)里面可以加一个过滤器也可以加多个过滤器,在这个里面加了多个过滤器,前面首先创建了一个FilterList,在 FilterList 里面使用了两个 SingleColumnValueFilter 过滤器;每一次创建完成之后,都会 add 进去;在 FilterList .Operator.MUST PASS _ONE 是什么意呢?首先这个是一个多个 Filter,必须满足其中一个条件。看一下Filter 支持于那些:(代码如下:)

代码:

/**

*  查询某个手机号所有王叫type=0的通话单

*/

public void scanDB2() {

FilterList list = new FilterList(FilterList .Operator .MUST PASS _ONE/ MUST PASS _ALL);

PrefixFilter prefixFilter = new PrefixFilter ("18699732123".getBytes())

1ist. addFilter (prefixFiiter) ;

SingleColumnValueFilter singleColumnValueFilter =new SingleColumnValueFilter("cf1".getByte9()"type" .getByte5(),CompareOp.EQUAL; "0" getBytes());

list . addFilter (singleColumnValueFilte) ;

}

在上面代码里面,MUST PASS _ONE 表示满足其中之一就行,而 MUST PASS _ALL 都要满足。

SingleColumnValueFilter 这个主要是什么意思呢?在66.2 column value 这章里面就讲到了(下列例子:)

SingleColumValueFilter filter = new SingleCoLumnVaLUeFilter(

Cf,

Column,

CompareOp.EQUAL,

Bytes. toBytes("my value")};

scan.setFilter(filter);

创建了一个 SingleCoLumnVaLUeFilter,有这几个选项:

第一个、列图,

第二个、列名,

第三个、是操作干,必须要相等,后面加了一个值,是一个四节数组的值。在后面加了给 my value 是什么意思?就是你的过滤器,这一列它的值必须等于 my value

我们继续完善 scanDB2代码!

相关实践学习
lindorm多模间数据无缝流转
展现了Lindorm多模融合能力——用kafka API写入,无缝流转在各引擎内进行数据存储和计算的实验。
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
存储 SQL 自然语言处理
基于 HBase 的海量数据查询与检索解析|学习笔记
快速学习基于 HBase 的海量数据查询与检索解析
基于 HBase 的海量数据查询与检索解析|学习笔记
|
6月前
|
SQL 分布式计算 Hadoop
Hadoop学习笔记(HDP)-Part.16 安装HBase
01 关于HDP 02 核心组件原理 03 资源规划 04 基础环境配置 05 Yum源配置 06 安装OracleJDK 07 安装MySQL 08 部署Ambari集群 09 安装OpenLDAP 10 创建集群 11 安装Kerberos 12 安装HDFS 13 安装Ranger 14 安装YARN+MR 15 安装HIVE 16 安装HBase 17 安装Spark2 18 安装Flink 19 安装Kafka 20 安装Flume
137 1
Hadoop学习笔记(HDP)-Part.16 安装HBase
|
存储 前端开发 Cloud Native
基于 HBase 快速构架海量订单存储系统|学习笔记
快速学习基于 HBase 快速构架海量订单存储系统
基于 HBase 快速构架海量订单存储系统|学习笔记
|
存储 搜索推荐 Java
如何基于 HBase 构建图片、视频数据的统一存储检索方案|学习笔记
快速学习如何基于 HBase 构建图片、视频数据的统一存储检索方案
如何基于 HBase 构建图片、视频数据的统一存储检索方案|学习笔记
|
SQL 存储 边缘计算
HBase&Hive 2(三)|学习笔记
快速学习 HBase&Hive 2(三)
131 0
HBase&Hive 2(三)|学习笔记
|
SQL 存储 分布式计算
HBase&Hive 2(二)|学习笔记
快速学习 HBase&Hive 2(二)
HBase&Hive 2(二)|学习笔记
|
存储 SQL 分布式计算
HBase&Hive 2(一)|学习笔记
快速学习 HBase&Hive 2(一)
116 0
HBase&Hive 2(一)|学习笔记
|
存储 SQL 缓存
HBase&HIve 1|学习笔记
快速学习 HBase&HIve 1
172 0
HBase&HIve 1|学习笔记
|
SQL 消息中间件 存储
基于 HBase 的大数据在线分析|学习笔记
快速学习基于 HBase 的大数据在线分析
基于 HBase 的大数据在线分析|学习笔记
|
XML 缓存 分布式计算
集成 Oozie 服务&amp;集成 Hbase 服务 | 学习笔记
快速学习 集成 Oozie 服务&amp;集成 Hbase 服务
101 0
集成 Oozie 服务&amp;集成 Hbase 服务 | 学习笔记