hbase与hive关联、插入数据

接上一篇文章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', 'value103');

上面插入语句还有另外一种表现形式:

insert into test.hbase_test select 'key_105', 'value105', 'value105', 'value105', 'value105', 'value105' from test.hbase_test;

当需要插入多组数据:

insert into test.hbase_test select 'key_106', 'value106', 'value106', 'value106', 'value106', 'value106' from test.hbase_test union all select 'key_107', 'value107', 'value107', 'value107', 'value107', 'value107' from test.hbase_test;

当然,我说明这种插入方式的重点不是让你用这样“蠢”的方法去造数据,其实是为了说明,你可以直接从某张表/某几张表中取相应的字段插入到hive中去,在操作大量的数据时,不论是操作便捷性还是执行效率都会答复提高。

来看一下插入数据后,通过hbase查看,确认数据是否完整 无误:

hbase(main):002:0> scan 'hbase_test'
ROW                                              COLUMN+CELL                                                                                                                                   
 key_1                                           column=column_family_1:column_1, timestamp=1534306889023, value=value1                                                                        
 key_1                                           column=column_family_1:column_2, timestamp=1534306889072, value=value2                                                                        
 key_100                                         column=column_family_1:column_1, timestamp=1534339263770, value=value100                                                                      
 key_100                                         column=column_family_1:column_2, timestamp=1534339263770, value=value100                                                                      
 key_100                                         column=column_family_2:column_3, timestamp=1534339263770, value=value100                                                                      
 key_100                                         column=column_family_2:column_4, timestamp=1534339263770, value=value100                                                                      
 key_100                                         column=column_family_3:column_family_3, timestamp=1534339263770, value=value100                                                               
 key_101                                         column=column_family_1:column_1, timestamp=1534339607141, value=value101                                                                      
 key_101                                         column=column_family_1:column_2, timestamp=1534339607141, value=value101                                                                      
 key_101                                         column=column_family_2:column_3, timestamp=1534339607141, value=value101                                                                      
 key_101                                         column=column_family_2:column_4, timestamp=1534339607141, value=value101                                                                      
 key_101                                         column=column_family_3:column_family_3, timestamp=1534339607141, value=value101                                                               
 key_102                                         column=column_family_1:column_1, timestamp=1534339607141, value=value102                                                                      
 key_102                                         column=column_family_1:column_2, timestamp=1534339607141, value=value102                                                                      
 key_102                                         column=column_family_2:column_3, timestamp=1534339607141, value=value102                                                                      
 key_102                                         column=column_family_2:column_4, timestamp=1534339607141, value=value102                                                                      
 key_102                                         column=column_family_3:column_family_3, timestamp=1534339607141, value=value102                                                               
 key_103                                         column=column_family_1:column_1, timestamp=1534339607141, value=value103                                                                      
 key_103                                         column=column_family_1:column_2, timestamp=1534339607141, value=value103                                                                      
 key_103                                         column=column_family_2:column_3, timestamp=1534339607141, value=value103                                                                      
 key_103                                         column=column_family_2:column_4, timestamp=1534339607141, value=value103                                                                      
 key_103                                         column=column_family_3:column_family_3, timestamp=1534339607141, value=value103                                                               
 key_105                                         column=column_family_1:column_1, timestamp=1534340772390, value=value105                                                                      
 key_105                                         column=column_family_1:column_2, timestamp=1534340772390, value=value105                                                                      
 key_105                                         column=column_family_2:column_3, timestamp=1534340772390, value=value105                                                                      
 key_105                                         column=column_family_2:column_4, timestamp=1534340772390, value=value105                                                                      
 key_105                                         column=column_family_3:column_family_3, timestamp=1534340772390, value=value105                                                               
 key_106                                         column=column_family_1:column_1, timestamp=1534340914867, value=value106                                                                      
 key_106                                         column=column_family_1:column_2, timestamp=1534340914867, value=value106                                                                      
 key_106                                         column=column_family_2:column_3, timestamp=1534340914867, value=value106                                                                      
 key_106                                         column=column_family_2:column_4, timestamp=1534340914867, value=value106                                                                      
 key_106                                         column=column_family_3:column_family_3, timestamp=1534340914867, value=value106                                                               
 key_107                                         column=column_family_1:column_1, timestamp=1534340914867, value=value107                                                                      
 key_107                                         column=column_family_1:column_2, timestamp=1534340914867, value=value107                                                                      
 key_107                                         column=column_family_2:column_3, timestamp=1534340914867, value=value107                                                                      
 key_107                                         column=column_family_2:column_4, timestamp=1534340914867, value=value107                                                                      
 key_107                                         column=column_family_3:column_family_3, timestamp=1534340914867, value=value107                                                               
 key_2                                           column=column_family_1:column_1, timestamp=1534306889078, value=value4                                                                        
 key_2                                           column=column_family_1:column_2, timestamp=1534306889083, value=value5                                                                        
 key_3                                           column=column_family_1:column_2, timestamp=1534306889093, value=value5                                                                        
 key_4                                           column=column_family_1:column_1, timestamp=1534306889099, value=value1                                                                        
 key_4                                           column=column_family_2:column_3, timestamp=1534306889104, value=value3                                                                        
 key_4                                           column=column_family_3:, timestamp=1534306889116, value=value1                                                                                
 key_5                                           column=column_family_1:column_1, timestamp=1534306889122, value=value1                                                                        
 key_5                                           column=column_family_2:column_3, timestamp=1534306889128, value=value4                                                                        
 key_5                                           column=column_family_3:, timestamp=1534306889144, value=value2                                                                                
12 row(s) in 0.4970 seconds

创建hive表时,可以指定hdfs上的存储路径,而后可以通过hadoop命令,put csv格式的文件至hive表中,此亦不失一种插入数据的方法(在hive相关文章中作详细说明吧)。

阅读更多
换一批

没有更多推荐了,返回首页