作为Nosql数据库的一员,HBase查询只能通过其rowkey来查询(rowkey用来表示唯一一行记录),HBase中的数据是按照rowkey的ASCII字典顺序进行全局排序的。HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位。
HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式:
- 通过get方式(org.apache.hadoop.hbase.client.Get),指定rowkey获取唯一一条记录
- 通过scan方式(org.apache.hadoop.hbase.client.Scan),设置startRow和stopRow参数进行范围匹配
- 全表扫描,即直接扫描整张表中所有行记录
get:
按照RowKey获取唯一一条记录。get的方法处理分两种:设置了ClosestRowBefore和没有设置ClosestRowBefore的RowLock。主要用来保证行的事务性,即每个get是以一个row来标记的。
scan:
按照指定的条件获取一批记录。实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:
- scan可以通过setCach与setBatch方法提高速度(以空间换时间)
- scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能
- scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础
补充:Hbase列族怎么创建比较好
一个列族在数据底层是一个文件,所以将经常一起查询的列放到一个列族中,列族尽量少,减少文件的寻址时间。
Rowkey设计原则
Rowkey设计应遵循以下原则:
【1】Rowkey的唯一原则
由于在HBase中数据存储是Key-Value形式,若HBase中同一表插入相同Rowkey,则原先的数据会被覆盖掉(如果表的version设置为1的话),所