开发者学堂课程【分布式数据库 HBase 快速入门:全表扫描】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/101/detail/1752
全表扫描
内容简介:
1.获取 table 对象
2.构建扫描器
3.遍历数据并打印
1.获取 table 对象
Scan 扫描全表可以指定 startrow 和 stoprow,扫描表里面只需添加一个表名作为参数(例如:scanTable(String tableName)),在 getScanner 括号里面传入一个 new Scan。
2.构建扫描器
在全表扫描里,scan 不用格外添加列,在使用 startrow 和 stoprow 时,需要从外界传入。
因为表里有多条数据,所以得出 ResultScanner 是一个集合,如果想打印每条数据的话,要对整个集合进行一个 for 循环。
一个 result 与一个 rowkey 一一对应,但是一个 rowkey 里面可以有多个单元格。具体打印某一条数列是打印单元格里面的数列。
1)RowKey
与 nosq1 数据库们一样,RowKey 是用来检索记录的主键。访间 HBASE table 中的行,只有三种方式:
(1)通过单个 RowKey 访问
(2)通过 RowKey 的 range(正则)
(3)全表扫描
RowKey 行键 (RowKey) 可以是任意字符串(最大长度是 64KB,实际应用中长度一般为10-100bytes),在 HBASE 内部,RowKey 保存为字节数组。
存储时,数据按照 RowKey 的典序( byte order)排序存储。
设计 RowKey 时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)。
2)Cell
由 {rowkey,column Family:columu,version} 唯一确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。
关键字:无类型、字节码,
每个 cell 有自己的 r owkey,有 qualifier 列名,family 列族,输入 value 会发现所有的都是过时的。
要调用工具类,用 cellutil 去调用克隆的 value,将 value 取出。
3.遍历数据并打印
接下来打印 出rowkey,列名,列族,值,用 cellutil 的工具类克隆出 row,将 cell传入,用 bytes 数组 bytes toString 转成 string。
用“RK” 加上其值,列族 “CF”,列名 “CN”, 值“VALUE”同理,注意,在CF,CN,VALUE 前加入“,”,防止和前面粘连。最后,在 for 循环结束之后关闭 table。
打印两条数据,得到结果。
需要注意的是 for 循环里面嵌套了 for 循环,先是 rowkey 的一个封装,再是 cell 的一个封装。
整个结构为一个 rowkey 下对应于多个列,一个列里有多个版本,cell是到了版本的位置。