今天主要给大家讲解一下,如何使用Hive来查询及操作HBase里面的数据,也就是实现二者的数据互通互导,相互操作。
首先不了解HBase的亲可以看一下我之前写过的一片博文:
《白话解说:SQL与NoSQL》https://ask.hellobi.com/blog/Matthew112/12341
一、那么看完之后我们先来简单了解一下HBase如何存放数据及对应语法:
HBase 建一张学生表,Row Key是学生编号,两个column family分别为基本信息(info)、地址(address)。
1.行键:决定一行数据。
2.列簇:每个列簇可以有多个列成员(course:Math,course:English),以类似于K-V的形式存储数据。
3.建表语句:create 'table name','column name01','column name02',...,'column nameXX'。
4.插入数据:put 'table name','row key','column name:','value'
二、接下来我们再HBase里面进行实操,建表插数:
建立一张表:
create 'students','info','address'
插入几条数据:
put 'students','12001','info:name','max'
put 'students','12001','info:age','20'
put 'students','12001','address:province','Liaoning'
put 'students','12001','address:city','Dalian'
put 'students','12002','info:name','leo'
put 'students','12002','info:age','21'
put 'students','12002','address:province','Hebei'
put 'students','12002','address:city','Guojizhuang'
看一下HBase中刚刚建好的数据表:
三、关于HBase的题外话:
HBase查询数据的语法对于一个SQL使用者来说简直就是折磨,在随后的HBase课程中我会向大家详细介绍其两种查询数据的方法及二者的区别:put、scan。
毕竟HBase才是真正意义上的数据库(存储处理海量数据的NoSQL),Hive可以理解为Hadoop的SQL编程接口,敬请关注我的后续HBase课程吧。
四、建立一章Hive表,实现其与HBase数据互通互导:
CREATE EXTERNAL TABLE hbase_to_hive_students(key string, name string,age string,province string,city string)-- key是hbase的rowkey, 各个字段是hbase中的quailiter
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' -- 使用的类
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age,address:province,address:city") -- 字段映射关系
TBLPROPERTIES ("hbase.table.name" = "students"); -- 映射的HBase表
五、检验一下二者数据互通互道:
Hive端查询:
select * from students;
HBase端插入数据:
put 'students','12003','info:name','Mathew'
Hive端数据查询:
select * from students;
Hive端数据数据插入:
insert into table hbase_to_hive_students values('12004','bill','25','Shandong','Qingdao');
HBase端数据查询:
scan'students'
OK,做到这里,大家可以发现,无论在Hive里面insert还是在HBase里面put插入,两端是都能看到新数据的,这也就完成了Hive与HBase间的数据互通互导。
个人原创,转载请联系!个人原创,转载请联系!个人原创,转载请联系!