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过滤掉一部分数据。
上一篇: Docker Hub结合Github自动化构建镜像
下一篇: 队列的C语言实现
推荐阅读
-
Hive中导入Amazon S3中的分区表数据的操作
-
shell 命令行中操作HBase数据库实例详解
-
Spark2中操作HBase的异常:java.lang.NoSuchMethodError: org.apache.hadoop.hbase.HTableDescriptor.addFamily
-
读取Hive中的数据写入Hbase
-
使用Hive读取Hbase中的数据
-
Spark使用Java读Hive写入HBase
-
Flume+Kafka+SparkStream+Hbase+mysql+Hive和Hbase之间映射
-
Hbase与Hive对比
-
impala、hive 操作hbase
-
hive,hbase,impala之间的对比详解