hive对接hbase(二)-hive中操作hbase

hbase的查询比较简单,总得来看就是只有rowkey的定位。
在hbase的查询中可以使用scan来定位rowkey,使用filter来定位具体要查询的某个字段。

在hive对接hbase后,就可以使用sql对hbase进行操作,那在hive中又能对hbase做哪些操作呢,哪些操作是在hbase中进行,哪些是在hive中进行。如果不清楚这些问题,在实际的使用过程当中,我们就没办法对查询效率以及优化做出合理的判断。
经过查看源码后,下面总结了常用的sql在hive中执行时,这些sql都转换成了哪些对应的hbase api。

下面一篇根据源代码来讲解在hive中的sql是怎样转换为hbase api进行查询以及mapreduce。

1.主键的= > >= < <=

select * from hbase1 where rowkey>='1' and rowkey<'2';

如果在hive中映射的hbase表,对rowkey字段进行如上条件过滤时,就会转换为scan的startrow和endrow。
所以在hive中使用sql查询hbase数据时,一般都要用大于小于定位主键的范围。
在hive中能用的条件中只有上面的条件能转换为hbase的api,查询速度可以在上面条件上优化。

2.count()

select count(*) from hbase1 where rowkey>='1' and rowkey<'2';

这样的操作会转换为mapreduce,对hbase region里面的数据直接读取计算。
这时mapreduce的map数量为rowkey范围内region的数量。(之前自己猜测是hfile的数量,经过验证是region的数量)。

3.其它函数(like)

无论是主键的like还是列族字段的like,hive都会从hbase里面读取数据然后放到hive的计算任务中,按照hive的函数进行计算。

4.聚合函数group by、distinct、sum

和count类似,根据region转换为mapreduce任务。

总结

1.精确的随机查询。
对主键使用= >= < <=等条件,来进行查询。
2.聚合运算、表关联等操作。
根据情况能否用rowkey过滤掉一部分数据。

你可能感兴趣的:(hive,hbase,hive-sql,on,hadoop技术)