一、准备
1.1 官方文档
https://cwiki.apache.org/confluence/display/Hive/HBaseIntegration
1.2 依赖服务
Hive3.1.1:https://blog.csdn.net/qq_39680564/article/details/89714184
Hbase2.1.0:https://blog.csdn.net/qq_39680564/article/details/89515459
hadoop3.0.3:https://blog.csdn.net/qq_39680564/article/details/89513162
二、表映射
Hbase表 | Hive表 | 映射方法 |
---|---|---|
index1 | hbase_table1 | 列映射(单列) |
index1 | hbase_table2 | 列映射(多列) |
index1 | hbase_table3 | 列族映射 |
index1表结构
逻辑关系
2.1 列映射(单列)
Hive建表语句
CREATE EXTERNAL TABLE hbase_table_1(key string, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES("hbase.columns.mapping" = "cf0:indexId")
TBLPROPERTIES("hbase.table.name" = "index1", "hbase.mapred.output.outputtable" = "index1");
在Hive库中创建一个hbase_table_1表,列名为key、value
映射Hbase库中的index1表的cf0:indexId列
key、value为hive表的列名可修改
string为该字段的字符类型可修改
hive库中的表:
hive> show tables;
OK
hbase_table_1
Time taken: 0.03 seconds, Fetched: 1 row(s)
hive> select * from hbase_table_1;
11 11
13 11
9696 100
990111 11
990_11aa_aza 11
Time taken: 1.266 seconds, Fetched: 5 row(s)
第一列为rowkey的值
第二列为cf0:indexId的值
没有展示cf0:muMac的值
2.2 列映射(多列)
Hive建表语句
CREATE EXTERNAL TABLE hbase_table_2(key int, indexId string, muMac string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf0:indexId,cf0:muMac")
TBLPROPERTIES("hbase.table.name" = "index1", "hbase.mapred.output.outputtable" = "index1");
在Hive库中创建一个hbase_table_2表,列名为key、indexId、muMac
映射Hbase库中的index1表的cf0:indexId与cf0:muMac列
key、indexId、muMac为hive表的列名可修改
string为该字段的字符类型可修改
hive库中的表:
hive> show tables;
OK
hbase_table_1
hbase_table_2
Time taken: 0.02 seconds, Fetched: 2 row(s)
hive> select * from hbase_table_2;
OK
11 11 NULL
13 11 NULL
9696 100 NULL
9901 NULL uzzu
990111 11 NULL
NULL 11 NULL
Time taken: 0.144 seconds, Fetched: 6 row(s)
第一列为rowkey的值
第二列为cf0:indexId的值
第三列为cf0:muMac的值
2.3 列族映射
Hive建表语句
CREATE EXTERNAL TABLE hbase_table_3(value map<string,string>,row_key string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf0:,:key")
TBLPROPERTIES("hbase.table.name" = "index1", "hbase.mapred.output.outputtable" = "index1");
在Hive库中创建一个hbase_table_3表,列名为value map、row_key
映射Hbase库中的index1表的cf0:列名
key、indexId、muMac为hive表的列名可修改
string为该字段的字符类型可修改
hive库中的表:
hive> show tables;
OK
hbase_table_1
hbase_table_2
hbase_table_3
Time taken: 0.922 seconds, Fetched: 3 row(s)
hive> select * from hbase_table_3;
{"indexId":"11"} 11
{"indexId":"11"} 13
{"indexId":"100"} 9696
{"muMac":"uzzu"} 9901
{"indexId":"11"} 990111
{"indexId":"11"} 990_11aa_aza
Time taken: 1.469 seconds, Fetched: 6 row(s)
第一列为键值对
第二列为rowkey的值
三、总结
方法 | 建表语句 | 可视化 |
---|---|---|
单列映射 | 简单 | 友好 |
多列映射 | 复杂(列多) | 友好 |
列族映射 | 简单 | 不友好 |
推荐hive的可视化连接工具dbeaver:
https://blog.csdn.net/qq_39680564/article/details/89945195