接上一篇文章hbase的基本操作,做进一步深入。细想一下,使用put命令插入数据到hbase,使用get方法从hbase读取数据还是有诸多不方便。显然,NO SQL数据库在某些操作上还是没有支持SQL的数据库更加便捷。那么,是否可以将hbase与什么关联一下,既支持hbase的NO SQL又保留SQL的一些特性?答案是hbase与hive关联可以实现上述需求。
如何关联
关联前,先创建hbase表,而后创hive关联hbase表。这是因为,创hive关联hbase表时候,会检查关联的hbase表是否存在,也会检查hive字段与hbase的列值对应关系是否能成立(简单来说,会检查hbase的列族,列是否存在)。关联表时需注意’hbase.columns.mapping’这个值,此值与hive的字段自上而下一一对应。一般来说,hive的第一行为主键,对应到hbase为”key”。另外一个注意点是’hbase.table.name’后需填写hbase的表名。
create external table test.hbase_test(
key string,
column_1 string,
column_2 string,
column_3 string,
column_4 string,
column_5 string
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with
serdeproperties('hbase.columns.mapping'=':key,column_family_1:column_1,column_family_1:column_2,column_family_2:column_3,column_family_2:column_4,column_family_3:column_family_3')
tblproperties('hbase.table.name'='hbase_test');
以上,创建了一张hive表test.hbase_test
并与已创建的hbase表关联hbase_test
。
关联表后,hbase的NO SQL操作依旧,具体就不介绍了,参考上一篇文章hbase的基本操作。同时,也具有一些HIVE SQL的特性。比如,插入数据的方式丰富了(需注意,hive表插入数据时,不支持指定字段,故插入时不可指定字段。否则,执行时会报错):
insert into test.hbase_test values('key_100', 'value100', 'value100', 'value100', 'value100', 'value100');
若需插入多条数据:
insert into test.hbase_test values('key_101', 'value101', 'value101', 'value101', 'value101', 'value101'),('key_102', 'value102', 'value102', 'value102', 'value102', 'value102'),('key_103', 'value103', 'value103', 'value103', 'value103',