欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

hive对接hbase:hive中操作hbase

程序员文章站 2022-07-05 22:50:04
hbase的查询比较简单,总得来看就是只有rowkey的定位。 在hbase的查询中可以使用scan来定位rowkey,使用filter来定位具体要查询的某个字段。 在hive对接hbas...

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过滤掉一部分数据。