HBase比较适合key-value形式的存储和查询,对于多条件查询的情况,查询效率基本依赖rowkey的设计。对于实时性要求不高的情况,可以通过Hive进行离线查询。这时需要在Hive中建立一张可以映射到HBase的表以便进行查询。
假设有张HBase的表queryword
,设计如下
| rowkey | s |
| --- | --- | --- |
| md5(word)[8:-8] + timestamp | word, pv, uv, date |
Hive中建立映射的方式如下
create <font color=red>external</font> table queryword
(id string,
word string,
pv string,
uv string,
date string)
stored by <font color=red>'org.apache.hadoop.hive.hbase.HBaseStorageHandler'</font>
with serdeproperties ("hbase.columns.mapping"="
:key,
s:word,
s:pv,
s:uv,
s:date");
需要注意的有下面几点
- 表名前需要指明
external
,告诉Hive这是一个已经存在的外部表 - 通过
org.apache.hadoop.hive.hbase.HBaseStorageHandler
指定这是HBase里的表 - HBase和Hive中的字段需要一一对应
执行完创建表语句之后就可以在hive里进行查询了