Hbase 是可以支持實(shí)時(shí)查詢的非關(guān)系行數(shù)據(jù)庫水援,采用列存儲(chǔ)的同時(shí)也是的直接查詢的數(shù)據(jù)不太直觀摧阅,對(duì)此顽腾,我們可以將之關(guān)聯(lián)hive表喜鼓,通過HQL大到查詢Hbase的目的
Hbase 關(guān)聯(lián) hive 表有兩種方式(通過建立hive管理表 和 外表的方式實(shí)現(xiàn))
通過管理表
1际乘、創(chuàng)建hive-hbase 管理表:
drop table tbl_hive_mange;
create table tbl_hive_mange
(key String,
dict_id String,
city_id String,
city_name String,
city_code String,
group_id String,
group_name String,
area_code String,
bureau_id String,
sort String,
bureau_name String)
row format delimited
fields terminated by '|'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,
? ? info:dict_id,
? ? info:city_id,
? ? info:city_name,
? ? info:city_code,
? ? info:group_id,
? ? info:group_name,
? ? info:area_code,
? ? info:bureau_id,
? ? info:sort,
? ? info:bureau_name")
TBLPROPERTIES("hbase.table.name" = "tbl_hive_mange");
2坡倔、創(chuàng)建普通的 hive 管理表
drop table tbl_hive_mange_1;
create table tbl_hive_mange_1
(key String,
dict_id String,
city_id String,
city_name String,
city_code String,
group_id String,
group_name String,
area_code String,
bureau_id String,
sort String,
bureau_name String)
row format delimited
fields terminated by '|'
STORED AS TEXTFILE;
3、向 tbl_hive_mange_1 中添加數(shù)據(jù)
load data inpath 'hdfs:/ns1/user/hive/warehouse/xx.db/a...' into table tbl_hive_mange_1;
4脖含、將 tbl_hive_mange_1 的數(shù)據(jù)添加到 tbl_hive_mange
insert overwrite table tbl_hive_mange select * from tbl_hive_mange_1;
目前為止:
建立了一張Hbase的表:tbl_hive_mange
并關(guān)聯(lián)了 hive 表:tbl_hive_mange
同時(shí)將hive表 tbl_hive_mange_1 的數(shù)據(jù)添加到了 tbl_hive_mange
可以通過hivev表:tbl_hive_mange查詢Hbase表:tbl_hive_mange 數(shù)據(jù)
注:
a:建立hive-hbase 管理表 tbl_hive_mange 后不能直接通過load data 的方式添加數(shù)據(jù)
hive> load data inpath 'hdfs://ns1/user/hive/warehouse/xx.db/tbl_hive_test' into table tbl_hive_test;
FAILED: SemanticException [Error 10101]: A non-native table cannot be used as target for LOAD
b:通過 desc formatted tbl_hive_mange 可以看到在默認(rèn)的hive數(shù)據(jù)存儲(chǔ)路徑下存在制定文件夾罪塔,但是卻沒有數(shù)據(jù),表明這個(gè)數(shù)據(jù)是存在hbase下面的养葵。
c:刪除表操作
先刪除hbase(disabled->drop)
hbase(main):003:0> disable 'tbl_hive_mange'
0 row(s) in 2.5610 seconds
hbase(main):004:0> drop 'tbl_hive_mange'
0 row(s) in 1.3140 seconds
此時(shí)show tables 在hive里面能看到tbl_hive_mange 但是已經(jīng)沒有數(shù)據(jù)了征堪,用show tables還能查出來。但是用select * from tbl_hive_mange 查詢的時(shí)候報(bào)錯(cuò)
此時(shí)mysql中TBLS還有hive表的信息关拒,執(zhí)行drop table? tbl_hive_mange 報(bào)錯(cuò)佃蚜。
繼續(xù)show tables時(shí),發(fā)現(xiàn)表已經(jīng)不在了着绊。TBLS里面也沒有hive表信息了谐算。
通過管理表
1、建立外部表(hive),關(guān)聯(lián)存在hbase表
drop table tbl_hive_xternal;
create xternal table tbl_hive_xternal
(key String,
dict_id String,
city_id String,
city_name String,
city_code String,
group_id String,
group_name String,
area_code String,
bureau_id String,
sort String,
bureau_name String)
row format delimited
fields terminated by '|'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = ":key,
? ? info:dict_id,
? ? info:city_id,
? ? info:city_name,
? ? info:city_code,
? ? info:group_id,
? ? info:group_name,
? ? info:area_code,
? ? info:bureau_id,
? ? info:sort,
? ? info:bureau_name")
TBLPROPERTIES("hbase.table.name" = "tbl_hive_xternal");
2归露、創(chuàng)建普通的 hive 管理表
drop table tbl_hive_xternal_1;
create table tbl_hive_xternal_1
(key String,
dict_id String,
city_id String,
city_name String,
city_code String,
group_id String,
group_name String,
area_code String,
bureau_id String,
sort String,
bureau_name String)
row format delimited
fields terminated by '|'
STORED AS TEXTFILE;
3洲脂、向 tbl_hive_xternal_1 中添加數(shù)據(jù)
load data inpath 'hdfs:/ns1/user/hive/warehouse/xx.db/a...' into table tbl_hive_xternal_1;
4、將 tbl_hive_xternal_1 的數(shù)據(jù)添加到 tbl_hive_xternal
insert overwrite table tbl_hive_xternal select * from tbl_hive_xternal_1;
目前為止:
建立了 hive 外部表表: tbl_hive_xternal
同時(shí)將hive表 tbl_hive_xternal_1 的數(shù)據(jù)添加到了 tbl_hive_xternal
可以通過hivev表: tbl_hive_xternal 查詢Hbase表: tbl_hive_xternal 數(shù)據(jù)
注:
a:使用外部表需要確保 hbase的表存在剧包,同時(shí)在建立hive標(biāo)的時(shí)候可以指定hbase中不存在的列
b:desc formatted tbl_hive_xternal可以看到存儲(chǔ)文件的路徑恐锦,但是真實(shí)的數(shù)據(jù)存儲(chǔ)在hbase
c:刪除操作:刪除hive表對(duì)hbase操作沒有影響; 但是刪除hbase表后hive查詢會(huì)報(bào)錯(cuò)(數(shù)據(jù)存hbase)