1. 程式人生 > >hbase與hive關聯、插入資料

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相關文章中作詳細說明吧)。