Hbase常用操作整理(持续更新)

一. 查询操作

HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式:

  • 通过get方式,指定rowkey获取唯一一条记录
  • 通过scan方式,设置startRow和stopRow参数进行范围匹配
  • 全表扫描,即直接扫描整张表中所有行记录

1. get查询

get 查询一行或其部分数据,获取一行数据时,可以获取这一行数据中的多列数据,必须提供rowkey

# 查询整行数据
get 'test_shc','20180824092337_701_211002197709040937'

# 查询列族person_base的数据
get 'test_shc','20180824092337_701_211002197709040937','person_base'

# 查询列族grade中列class的数据
get 'test_shc','20180824092337_701_211002197709040937','person_base:name'

2. 什么是scan

scan是较为底层的也是用的最多的一种获取Hbase中数据的方式。
scan可以根据rowkey,cf,column,timestamp,filter来获取方式。在这里优先推荐根据rowkey的方式获取数据,即可以指定startrow和endrow,也可以指定具体的某个行键去获取数据。在源码中也指出了如果具体指定了rowkey,那么会只是扫描那一段的数据。众所周知,hbase底层存储数据是根据rowkey的字典顺序存储数据的,所以如果使用rowkey的方式去查找,scan就可以顺序查找,大大缩短了时间。

使用scan注意事项:
实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值得注意:

  1. scan可以通过setCaching与setBatch方法提高速度(以空间换时间);

  2. scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。

    通过巧妙的RowKey设计使我们批量获取记录集合中的元素挨在一起(应该在同一个Region下),可以在遍历结果时获得很好的性能。

    rowkey是以字典顺序排序的,存储的是字节码。
    根据rowkey范围查询的时候,如果我们通过scan只传startRowKey:d开头的,那么查询的就是所有比d大的数据;而假如我们只需要d开头的数据,那就可以通过endRowKey来限制。比如说rowkey设计为:用户ID-日期,那么查某个用户某天的数 据,startKEY为3231-20121212,endKey为:3231+20121213,那么查到的就是用户为3231在20121212这一天 的数据。

  3. scan可以通过setFilter方法添加过滤器,这也是分页、多条件查询的基础。

使用scan注意事项:

scan操作示例:

使用scan进行范围查询:

# rowkey格式如下:
2018-08-24 09:23:37_701_211002197709040                                                                                                                      
2018-08-24 09:25:37_301_211002197709045

# 1 按rowkey的范围查询
scan 'test_shc', {STARTROW=>'2018-08-24 09:20:00', STOPROW=>'2018-08-24 09:23:38'}

scan 'test_shc', {STARTROW=>'2018-08-24 09:20:00', ENDROW=>'2018-08-24 09:23:38'}

你可能感兴趣的:(Hbase常用操作整理(持续更新))